2009-11-05 3 views
4
SELECT user_id, created FROM photo_comments GROUP BY user_id 

возвращаетГруппа выбирает первое появление поля, как я могу получить последний?

user_id created 
    1  2009-10-20 21:08:22 
    12  2009-10-20 21:45:00 
    16  2009-10-28 20:35:30 

Но, создавший дата 2009-10-20 для идентификатора пользователя 1 первая запись по идентификатору пользователя 1.

Как я могу получить последнюю запись по идентификатору пользователя 1? (дата должна быть 2009-11-02)

Я пытаюсь получить последнюю запись каждым пользователем по порядку последних последних.

+0

Помните, что эта группа «выбирает» значение _unspecified_ field, а не первое. Честно говоря, он не должен выбирать ничего, и запрос должен потерпеть неудачу (это не имеет никакого смысла). Но mysql почему-то допускает такие запросы. – shylent

+0

Мне бы хотелось иметь агрегатную функцию 'some()', которая выбирает удобное значение из столбца, отличного от группы. –

ответ

5

Обычный SQL не должен допускать такой запрос в первую очередь. Теоретически вы можете запросить только поле, которое вы назвали в предложении GROUP BY, или агрегированную функцию какого-либо другого поля. Вот как вы построили измененный запрос. (Тогда вы можете добавить и другие поля также в первой строке.)

SELECT user_id, created 
FROM photo_comments o 
WHERE created = 
    (SELECT MAX(created) 
    FROM photo_comments i 
    WHERE o.user_id=i.user_id) 
+0

Это лучший способ, на мой взгляд. –

+0

mysql, похоже, не заботится о вашем внутреннем и внешнем. 'Ошибка в синтаксисе SQL около "external"' –

+0

'outer' и' inner' - это ключевые слова, используемые с объединениями. Обычно я помню эту маленькую деталь при первом запуске запроса и получении синтаксической ошибки. Я исправил ответ, переименовав их 'o' и' i'. –

7

Это будет работать:

SELECT user_id, max(created) FROM photo_comments GROUP BY user_id 
+2

В этой версии вы не можете добавить в запрос другие поля (например, 'photo_id' или' comment_id') и ожидать, что они будут работать разумно. –

+0

просто добавьте 'ORDER BY max (созданный) DESC' до конца –

0

делает ВЫБРАТЬ user_id, созданный из заказа photo_comments по созданной по убыванию GROUP BY user_id

не работает?

+0

Он заказывает результирующий набор, поэтому приведенный мною пример представлен в обратном порядке, но не получает последние записи. –

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

  • Нет связанных вопросов^_^