此问题已在此处有答案:
Select first row in each GROUP BY group?(20个回答)
16小时前关门了。
我想为每个chat_id
查找最新的message
条目。
例如,对于这个表,我需要获取行列表:对于chat_id
= ee5152ff
,id= 1c6bad12
;对于chat_id
= 29cc7217
,id= e4485bdf
。(第二和第六)。
| id|聊天ID|创建于|正文|
| - -----|- -----|- -----|- -----|
| 1442a8e8| ee5152ff| 2023-01-09 12:38:44.237280| hello1|
| 1c6bad12| ee5152ff| 2023-05-09 10:39:25.260409| hello3|
| 514c2db5| 29cc7217| 2023-02-14 09:05:20.284902| qwerty1|
| c4247480| ee5152ff| 2023-01-14 19:05:20.284902| hello2|
| e4485bdf| 29cc7217| 2023-06-14 11:05:20.284902| qwerty2|
现在我只有这样的疑问:
SELECT *
FROM message
ORDER BY created_at DESC, id DESC;
但它会重新运行所有行
3条答案
按热度按时间ht4b089n1#
您的查询返回所有行,因为它所做的只是排序。
由于希望为每个
chat_id
返回一行,因此可以使用DISTINCT ON
(注意,要在DISTINCT ON
中使用的列必须作为ORDER BY
中的初始列oknwwptz2#
这可以使用窗口函数
row_number()
为每个记录分配一个initiated id,每个记录按chat_id* 分组,按created_at**排序:Demo here
3xiyfsfu3#
我创建了您的表,猜测VARCHAR(255)用于所有字符串值,TIMESTAMP用于日期/时间字段。这似乎工作。