【发布时间】:2011-04-11 09:43:12
【问题描述】:
我有一个如下所示的消息表:
+------------+-------------+----------+
| 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,因此如果我想按该字段排序,则需要在 SELECT 语句中的 created_at 字段上使用聚合函数,所以我正在考虑做这样的事情作为初始测试
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 对应的消息。
有什么方法可以解决这个问题还是我用错了方法?
【问题讨论】:
-
你是什么版本的?
标签: sql postgresql group-by