Автор Тема: Помогите пожалуйста с выборкой  (Прочитано 2454 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DIvZ

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите пожалуйста с выборкой
« : 27 Апреля 2004, 17:32:26 »
Есть таблица sorev
n      data           s
1   2004-01-01   12
2   2004-01-01   14
3   2004-01-01   11
4   2004-01-01   0
3   2004-01-02   6
2   2004-01-02   9
4   2004-01-02   3
3   2004-01-03   14
4   2004-01-03   6
 То есть номер участника, дата участия и дальше какие-то данные.
 Как мне выбрать одним запросом данные для каждого участника на последнюю дату их участия т.е

1   2004-01-01   12
2   2004-01-02   9
3   2004-01-03   14
4   2004-01-03   6

select n,max(data),s from sorev group by n;
не подходит так как все поля после второго случайные.

select n,data,s from sorev order by data group by n;
не работает по синтаксису.

Помогите. База mysql.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Помогите пожалуйста с выборкой
« Ответ #1 : 29 Апреля 2004, 10:07:58 »
Может конечно не лучший вариант, но первый который пришел в голову...

create table sorev
(
id int not null primary key auto_increment,
n int,
date date,
s int
);

делать двумя запросами:

select n, MAX(date)  AS date from sorev group by n

select s FROM sorev WHERE n=\'$n\' AND date=\'$date\'
And no religion too...

Оффлайн CLiI{er

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://glossword.info/
Помогите пожалуйста с выборкой
« Ответ #2 : 02 Мая 2004, 19:50:42 »
Трюк "MAX-CONCAT" может помочь:

SELECT n,
substring( max( concat(data,lpad(s,6,\'0\')) ), 11)/1 as s,
substring( max( concat(data,lpad(s,6,\'0\')) ), 1, 10) as date,
count(*) AS times
FROM sorev
GROUP by n

+ получаете количество участий (times) для каждого участника (n).
lpad(s,6,\'0\') преобразует "12" в "000012".
concat(data,lpad(s,6,\'0\')) создает строку "2004-01-01 000012".

"Разумеется, пример можно сделать чуть эффективнее, если разбиение катенизированной строки делать на стороне клиента."
« Последнее редактирование: 02 Мая 2004, 19:55:44 от CLiI{er »
gw веб-песочница жж

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28