Sql-Server
在沒有 CTE/內聯表的情況下計算目前值和下一個值之間的差異
我有一張表,上面有使用者 ID 和他的訪問日期。我創建了一個 CTE,其中添加了下一次訪問列,並使用它來計算訪問之間的天差。
With Visits AS ( SELECT [uid],[visit_date] ,(SELECT MIN(visit_date) FROM Visit E2 WHERE E2.visit_date > E1.visit_date AND E2.uid= E1.uid ) AS next_visit_date FROM Visit E1 ) SELECT uid, DATEDIFF(day, visit_date, next_visit_date) FROM Visits
我知道 CTE 或臨時表不是一種記憶體高效的方式,因此希望提高效率。謝謝
我認為效率更依賴於您對錶進行 2 次掃描這一事實。您可以嘗試使用視窗函式:
SELECT uid, visit_date , LEAD(visit_date) OVER (PARTITION BY uid ORDER BY visit_date) as next_visit_date FROM Visit E1
現在您可以從那裡計算差異
SELECT uid, DATEDIFF(day, visit_date, LEAD(visit_date) OVER ( PARTITION BY uid ORDER BY visit_date )) FROM Visit E1