Window-Functions
如何同時在多列上使用類似 LEAD LAG 的函式
假設我有下表:
start_data | end_date ---------------------- t1 | Null Null | t2 t3 | Null Null | t4 t5 | Null
輸出應該是這樣的:
start_data | end_date ---------------------- t1 | t2 t3 | t4 t5 | Null
筆記:
- ti的類型是日期
- ti < ti+1適用於所有值。
虛擬碼:
對於每條記錄 i
xi <— start_date
yi <— end_date
zi <—- min(yi) && xi>yi
(xi,zi) 應該是這條記錄 i 的輸出
是否可以使用本機 SQL 解決?
我想可以訂購
coalesce(start_data, end_date)
WITH cte AS ( SELECT COALESCE(start_data, end_date) dt, ROW_NUMBER() OVER (ORDER BY COALESCE(start_data, end_date)) rn FROM datatable ) SELECT MIN(dt) start_data, MAX(dt) end_date FROM cte GROUP BY ROUND((rn-1)/2)
此查詢是一個模型。最終文本取決於 DBMS。
也許您需要將 MIN/MAX 替換為
CASE WHEN rn%2 = [0|1]