【问题标题】:How to use a window function to refer to a newer record?如何使用窗口函数来引用较新的记录?
【发布时间】:2021-03-16 09:57:18
【问题描述】:

我相信我需要使用窗口函数,但我不太确定。我的数据格式如下:

JobID   ActiveFromDate  RecID   TypeID
J1      01/12/2020      441166  LI2
J1      25/11/2020      375213  LO1
J1      24/11/2020      375207  LO2
J2      02/12/2020      441378  LO1
J2      01/12/2020      376896  LO2
J2      30/11/2020      375288  LI1
J3      03/12/2020      441894  LO2
J3      01/11/2020      374558  LI1
J3      31/10/2020      371285  LI2
J4      02/12/2020      441295  LI1
J4      13/11/2020      374598  LO2
J4      01/11/2020      374423  LO1

我想解决这个问题:

JobID   ActiveFromDate  ActiveToDate    RecID   TypeID
J1      01/12/2020                      441166  LI2
J1      25/11/2020      01/12/2020      375213  LO1
J1      24/11/2020      25/11/2020      375207  LO2
J2      02/12/2020                      441378  LO1
J2      01/12/2020      02/12/2020      376896  LO2
J2      30/11/2020      01/12/2020      375288  LI1
J3      03/12/2020                      441894  LO2
J3      01/11/2020      03/12/2020      374558  LI1
J3      31/10/2020      01/11/2020      371285  LI2
J4      02/12/2020                      441295  LI1
J4      13/11/2020      02/12/2020      374598  LO2
J4      01/11/2020      13/11/2020      374423  LO1

AuditToDate 是按 JobID 计算的。如果该 JobID 有较新的审计记录,则 AuditToDate 是较新审计记录的 AuditFromDate。否则为空。

有什么想法可以做到这一点吗?

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012


    【解决方案1】:

    LEAD 非常适合这里,如下所示:

    SELECT JobID, ActiveFromDate,
           LEAD(ActiveFromDate) OVER (PARTITION BY JobID ORDER BY ActiveFromDate) AS ActiveToDate,
        RecID, TypeID
    FROM table
    

    【讨论】:

    • 非常感谢。我什至不知道这个功能,但它就像你说的那样完美地完成了工作
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多