【问题标题】:Comparing time difference for every other row比较每隔一行的时间差
【发布时间】:2021-01-12 14:51:44
【问题描述】:

我正在尝试确定每隔一行使用 AR_Event_Creation_Date_Time 之间的时间长度。例如,第 1 行和第 2 行、第 3 行和第 4 行、第 5 行和第 6 行之间的天数等。换句话说,每个偶数行都有一个天数值,每个奇数行都有 NULL。如果每个借款人编号只有两行,但如果有两个以上的行,我的下面的代码就可以工作。在结果中,注意 1002092539 的变化

SELECT  Borrower_Number, 
Workgroup_Name,
FORMAT(AR_Event_Creation_Date_Time,'d','en-us') AS Tag_Date,
Usr_Usrnm,
DATEDIFF(day, LAG(AR_Event_Creation_Date_Time,1) OVER(PARTITION BY 
Borrower_Number Order By Borrower_Number), AR_Event_Creation_Date_Time) Diff
FROM Control_Mail

【问题讨论】:

    标签: sql sql-server sql-server-2017


    【解决方案1】:

    您需要添加行号。此外,您的 partition by 是不确定的:

    SELECT  Borrower_Number, 
        Workgroup_Name,
        FORMAT(AR_Event_Creation_Date_Time,'d','en-us') AS Tag_Date,
        Usr_Usrnm,
        DATEDIFF(day, LAG(AR_Event_Creation_Date_Time,1) OVER(PARTITION BY Borrower_Number, (rn - 1) / 2 ORDER BY AR_Event_Creation_Date_Time),
        AR_Event_Creation_Date_Time) Diff
    FROM (
        SELECT *,
        ROW_NUMBER() OVER (PARTITION BY Borrower_Number ORDER BY AR_Event_Creation_Date_Time) AS rn
        FROM Control_Mail
    ) C
    ```
    

    【讨论】:

    • 谢谢,但我没有得到大多数行的 Diff 值(它们都是 NULL)。例如,对于 1000447763,Diff 应该等于 1
    • 抱歉需要从 rn 中减去 1
    • 这对我有用。非常感谢。 ROW_NUMBER() OVER (PARTITION BY Borrower_Number ORDER BY AR_Event_Creation_Date_Time)-1 AS rn
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多