分组并获取组中的最新记录

我有一个名为 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也是有序的,也是最新的。

iCMS 回答:分组并获取组中的最新记录

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

有人能说一下查询下面的多个连接的成本是多少吗?

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
本文链接:https://www.f2er.com/118209.html

大家都在问