使用GROUP BY 從群組擷取最新記錄
在SQL 中,GROUP BY 子句通常用於對資料表中的資料進行分組和聚合。但是,在某些情況下,您可能會遇到需要從每個群組中獲取最新記錄而不是最舊的記錄的情況。
考慮以下範例:
SELECT * FROM messages GROUP BY from_id
雖然此查詢旨在分組基於from_id 列的記錄,它從每個群組中選擇最舊的訊息,因為它缺少時間戳排序標準。要檢索最新消息,我們需要如下修改查詢:
SELECT t1.* FROM messages t1 JOIN ( SELECT from_id, MAX(timestamp) AS latest_timestamp FROM messages GROUP BY from_id ) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.latest_timestamp
在此最佳化查詢中,我們利用子查詢來識別每個群組中的最新時間戳值。子查詢計算每個from_id的最大時間戳值並將其儲存為latest_timestamp。
然後主查詢將原始表(訊息)與子查詢表連接起來,根據from_id來匹配記錄。此外,它還確保原始表中的時間戳記 (t1.timestamp) 對應於每個組的最新時間戳記 (t2.latest_timestamp)。
此細化查詢將有效地檢索來自每個使用者的最新訊息,提供您將獲得想要的結果。
以上是如何使用 SQL 的 GROUP BY 子句從每個群組中檢索最新記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!