У меня есть таблица сообщений, которая выглядит следующим образом:
+------------+-------------+----------+
| 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.
Есть какой-нибудь способ достичь этого, или я подхожу неправильно?