группа postgres по агрегатной функции

У меня есть таблица сообщений, которая выглядит следующим образом:

+------------+-------------+----------+
| sender_id  |  created_at | message  |
+------------+-------------+----------+
|      1     | 2010-06-14  | the msg  |
|      1     | 2010-06-15  | the msg  |
|      2     | 2010-06-16  | the msg  |
|      3     | 2010-06-14  | the msg  |
+------------+-------------+----------|

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

Это похоже на GROUP BY sender_id и ORDER BY created_at, но у меня проблемы с получением самого последнего сообщения.

Я использую postgres, поэтому мне нужна агрегатная функция в поле created_at в операторе SELECT, если я хочу упорядочить по этому полю, поэтому я хотел сделать что-то подобное в качестве начального теста

SELECT messages.sender_id, MAX(messages.created_at) as the_date 
FROM messages 
GROUP BY sender_id 
ORDER BY the_date DESC 
LIMIT 10;

Кажется, это сработает, но когда я хочу также выбрать «сообщение», я не знаю, какую агрегатную функцию использовать для этого. Мне просто нужно сообщение, соответствующее MAX created_at.

Есть какой-нибудь способ достичь этого, или я подхожу неправильно?

6
задан johnnymire 12 September 2010 в 19:19
поделиться