在連接語句中選擇最近的日期:歷史位置資料檢索故障排除
此查詢旨在檢索記錄的歷史位置和他們對應的日期。然而,當前的實作需要很長的時間來執行並產生重複的記錄。預期輸出是一個簡化的記錄清單及其最近位置。
原始查詢嘗試透過執行自連線操作來尋找與每個記錄 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
解釋
解釋SELECT received_id, MAX(date_modified) AS maxmodify FROM transactions GROUP BY received_id在此查詢中,我們引入一個公共表表達式(CTE)來尋找transactions表中每個記錄 id 的最大日期。 CTE 為:然後,我們將原始交易表 (t1) 與 receive_id 欄位上的 CTE (max_record) 連接起來。此外,我們也對 maxmodify 欄位進行篩選,以確保僅包含最新日期的交易。這透過避免不必要的連接和重複來優化查詢。 透過這個最佳化的查詢,我們可以有效地取得每筆記錄的歷史位置,確保我們只檢索每個唯一記錄 ID 的最新位置。
以上是如何有效率地檢索連接語句中每筆記錄的最新位置資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!