分组并获取分组中的最新记录
Group by and get latest record in group
我有一个 table 命名的消息是这样的:
我想查询 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也是有序的,也是最新的。
我在通过以下查询发布问题后完成了此操作,但我认为这可能比其他方法花费更多...还有另一种低成本的方法吗?!
有人可以说出查询下方多重连接的计算成本吗?
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
我有一个 table 命名的消息是这样的:
我想查询 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也是有序的,也是最新的。
我在通过以下查询发布问题后完成了此操作,但我认为这可能比其他方法花费更多...还有另一种低成本的方法吗?!
有人可以说出查询下方多重连接的计算成本吗?
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