分组并获取组中的最新记录[重复]

Posted

技术标签:

【中文标题】分组并获取组中的最新记录[重复]【英文标题】:Group by and get latest record in group [duplicate] 【发布时间】:2021-09-20 12:31:39 【问题描述】:

我有一个名为 messages 的表,如下所示:

我想查询reciever_id 等于1 的位置并按sender_id 分组并获取最新记录。

我使用了查询:

SELECT `t`.* FROM(
    SELECT * FROM messages
    WHERE reciever_id = 1
    ORDER BY created_at DESC
) `t`
GROUP BY `sender_id`
ORDER BY `id`

还有:

SELECT message, MAX(created_at) 
FROM messages
WHERE reciever_id = 1
GROUP BY sender_id
ORDER BY created_at

图中的日期列created_at正好是最新的,id也是排序的,也是最新的。

【问题讨论】:

【参考方案1】:

我是在通过以下查询发布问题后完成的,但我认为这可能比其他人花费更多......还有另一种低成本的方法吗?!

有人可以说公式下面查询的多个连接的成本是多少吗?

SELECT id,sender_id,reciever_id,seen,message,created_at
FROM messages
WHERE id IN (
    SELECT MAX(id)
    FROM messages
    WHERE reciever_id = 1
    GROUP BY sender_id
    ORDER BY id desc
) ORDER BY created_at DESC

【讨论】:

以上是关于分组并获取组中的最新记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

具有最新记录的 Oracle 查询 GROUP BY [重复]

应用 groupby 后从组中获取特定元素-PANDAS [重复]

按最新日期获取分组后的列

从每个组中获取最新记录

从不同的相关记录组中选择两列之一中包含重复值的所有行

SAS / PROC SQL - 只要有重复(不只是删除重复),删除BY组中的所有观察