2012-04-13 2 views
0

У меня есть структура таблицы как:SQL: Сортировка GROUP по времени и LIMIT результаты

Name Time 

Joe  2012-02-22 22:11:26.0 
Joe  2012-02-22 21:01:23.0 
Sue  2012-02-22 20:57:10.0 
john 2012-02-22 18:13:36.0 
Fred 2012-02-22 16:56:57.0 
Joe  2012-02-22 14:38:45.0 
Joe  2012-02-22 14:38:45.0 
Ralph 2012-02-22 14:26:20.0 
...  ... 
(more Names and Times) 
...  ... 
john 2010-03-10 15:27:39.0 
john 2010-03-10 15:46:59.0 

Я ищу топ-3 имен упорядоченных по времени. Таким образом, результат будет:

Joe, Sue, john 

Я начал с запросом, как:

SELECT Name FROM table ORDER BY LOWER(TIME) DESC

Так что я хотел Ограничить результат с:

SELECT Name FROM table ORDER BY LOWER(TIME) DESC LIMIT 0 , 3

Но результат показывает первые 3 ряда в аспектированном виде:

Joe, Joe, Sue 

Теперь я пытаюсь сгруппировать запрос по имени первого:

SELECT Name FROM table GROUP BY Name ORDER BY LOWER(TIME) DESC LIMIT 0 , 3 

И да, что дает мне 3 разных имен, но в невоспроизводимое порядке. Я что-то упустил? Какой здесь был бы правильный синтаксис?

ответ

2
SELECT DISTINCT Name 
FROM table 
ORDER BY Time DESC 
LIMIT 3 

Так в основном, вам просто нужно добавить DISTINCT на свой второй запрос - это говорит MySQL, чтобы выбрать только уникальные значения. В группировке нет необходимости. UPD: это неверно, так как ORDER BY будет применен после DISTINCT, так как в большинстве случаев DISTINCT будет использовать GROUP BY.

P.S. Я не понимаю, почему вы используете LOWER. Эта функция делает строку строчной. Но вы не работаете с строками, так как второй столбец имеет тип DATETIME (я полагаю)?

UPD: Вы должны использовать группировку, вот пример:

SELECT Name 
FROM table 
GROUP BY Name 
ORDER BY MAX(Time) DESC 
LIMIT 3 

Здесь главное, чтобы принять максимальную дату/время из каждой группы и распоряжения этим.

+0

попробовал это. Но также показывает не правильные имена. И да, мне не нужна функция «НИЖНИЕ» –

+0

Это действительно странно. Что он показывает и что вы ожидаете? –

+0

Я обновил свой ответ. Если он все еще не работает, это означает, что упорядочение не работает должным образом. Убедитесь, что столбец имеет тип 'DATETIME'. –

Смежные вопросы