通过 GROUP BY 确定组内最新记录
在涉及具有相似分组条件的多条记录的数据库场景中,常见的任务是检索每组的最新记录。这在消息传递平台中得到了体现,其中需要来自每个用户的最新消息。
初始尝试和缺点
初始方法涉及使用 GROUP BY 子句将记录聚合到不同的组中,如查询中所示:
SELECT * FROM messages GROUP BY from_id
但是,此查询检索每组中最旧的消息而不是最新的消息。
查询解析
要获取每个组的最新记录,需要更复杂的方法。这涉及:
子查询:使用以下子查询确定每个组内的最新时间戳值:
SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id
加入子查询:加入带有子查询的原始消息表,匹配它们所在的 from_id 和时间戳列
SELECT t1.* FROM messages t1 JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
此查询为 messages 表中每个不同的 from_id 生成最新消息,解决了最初的问题。
以上是如何高效检索数据库中各组的最新记录?的详细内容。更多信息请关注PHP中文网其他相关文章!