簡體   English   中英

具有滯后事件分區的行號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM