您好,所以我的 SQL 查詢遇到了問題。我需要在最多天獲取每個 ID 的平均位置。雖然下面的查詢給了我正確的結果,但運行時間似乎根據 IDS 的數量呈指數增長。因此,雖然 1 或 2 個 IDS 幾乎是實時的,但 3 需要幾分鐘,而 5 需要很長時間。因此,對 5 個 ID 運行 5 個查詢比運行一個包含所有 5 個 ID 的查詢要快得多。(我有很多我需要檢查的ID,資料庫也很大)。
這是如何發生的,我該如何避免?
我的猜測是問題來自兩次選擇相同的 ID 串列,但我不確定如何修復它/如果這確實是問題。我查看了有關堆疊溢位的所有類似問題,但我沒有找到任何可以回答我的問題的問題。
SELECT t.ID, MAX(date) AS MAX(date), AVG(Latitude) AS lat, AVG(Longitude) AS long
FROM table1 t
INNER JOIN (
SELECT ID, max(date) AS maxdate
FROM table1 t2
WHERE ID IN ('1', '2', '3')
GROUP BY ID
) tm ON t.ID = tm.ID AND t.date = tm.maxdate
WHERE t.ID IN ('1', '2', '3')
GROUP BY t.ID
uj5u.com熱心網友回復:
你可以試試視窗函式:
WITH cte AS (
SELECT *, RANK() OVER (PARTITION BY id ORDER BY date DESC) AS rn
FROM t
WHERE id IN ('1', '2', '3')
)
SELECT id, max(date), min(...)
FROM cte
WHERE rn = 1
GROUP BY id
uj5u.com熱心網友回復:
您可以嘗試exists在子句中使用運算子,where如下所示:
Select ID, MAX(date) as [date], AVG(Latitude) as lat, AVG(Longitude) as long
From table1 As t
Where ID In ('1', '2', '3')
And Exists (Select * From table1 Where ID=t.ID Group by ID Having Max(date)=t.date)
Group by ID
在我有 500 萬行的示例表上,它比使用視窗函式要快一點,尤其是使用合適的索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416744.html
標籤:
