[英]Row number with lag event partition
我想插入一個由上一個標志划分的行號。
我曾嘗試在分區中使用lag函數,但在使用NULL時遇到了挑戰。
我可以通過LAG和LEAD函數以及其他鍵標志確定的多個日期差來確定X的不同塊。 因此,LAG和LEAD列中的每個0表示行已“鏈接”。
我的表看起來像這樣,我希望行號在X的第二個塊處重新開始:
Person_ID Event_flag Row_number LAG_datediff LEAD_datediff FLAG FLAG2
A X 1 NULL 0 1 NULL
A X 2 0 40 NULL NULL
A Y 1 40 150 NULL NULL
A X 1 150 0 1 NULL
A X 2 0 NULL NULL 1
您需要一個排序列來對行進行編號。 沒有樣本數據很難,但是如果您的表是按一個date
列排序的,那么下一種方法可能有助於獲得預期的結果:
數據:
CREATE TABLE #Data (
Event_Date date,
Person_ID varchar(1),
Event_flag varchar(1)
)
INSERT INTO #Data
(Event_date, Person_ID, Event_flag)
VALUES
('20190910', 'A', 'X'),
('20190911', 'A', 'X'),
('20190912', 'A', 'Y'),
('20190913', 'A', 'X'),
('20190914', 'A', 'X'),
('20190915', 'A', 'X'),
('20190916', 'A', 'Y')
聲明:
;WITH ChangesCTE AS (
SELECT
Event_Date,
Person_ID,
Event_flag,
CASE
WHEN Event_flag = LAG(Event_flag) OVER (ORDER BY Event_Date) THEN 0
ELSE 1
END AS Change_ID
FROM #Data
), GroupsCTE AS (
SELECT
Event_Date,
Person_ID,
Event_flag,
SUM([Change_ID]) OVER (ORDER BY Event_Date) AS Group_ID
FROM ChangesCTE
)
SELECT
Person_ID,
Event_flag,
ROW_NUMBER() OVER (PARTITION BY Group_ID ORDER BY Event_Date) AS Rn
FROM GroupsCTE
輸出:
--------------------------
Person_ID Event_flag Rn
--------------------------
A X 1
A X 2
A Y 1
A X 1
A X 2
A X 3
A Y 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.