在Join 語句中使用MAX Date 檢索歷史位置
在取得特定記錄ID 的歷史位置時,使用者遇到了效能問題,並且結果中出現重複條目。使用者嘗試透過連接多個表並按 receive_id 進行過濾來解決此問題,但未實現預期輸出。
要解決此問題,建議修改查詢如下:
SELECT t1.received_id , t1.transaction_id , t1.date_modified , l.location FROM transactions t1 JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record ON max_record.received_id = t1.received_id AND max_record.maxmodify = t1.date_modified JOIN locations l ON l.location_id = t1.location_id JOIN received r ON r.received_id = t1.received_id WHERE t1.received_id = '1782' ORDER BY t1.date_modified DESC
關鍵的更改涉及連接事務表兩次:一次用於主查詢,一次在子查詢中查找每個receive_id的最大date_modified 值。然後,該子查詢用於過濾主查詢並僅傳回具有最新 date_modified 值的行。
此技術的核心封裝在以下通用模式中:
SELECT x.* FROM my_table x JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y ON y.id = x.id AND y.max_thing = x.thing;
此方法有效地消除了重複條目,並提供了僅顯示每個記錄ID 和位置的最新修改時間的預期結果。
以上是如何使用 SQL 高效檢索給定記錄 ID 的最新歷史位置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!