Window-Functions

如何同時在多列上使用類似 LEAD LAG 的函式

  • November 20, 2018

假設我有下表:

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]

引用自:https://dba.stackexchange.com/questions/223002