透過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中文網其他相關文章!