【问题标题】:SQL / Teradata - How can I get the most recent record from one table RELEVANT TO A DATE COLUMN IN ANOTHER TABLE?SQL / Teradata - 如何从一个表中获取与另一个表中的日期列相关的最新记录?
【发布时间】:2021-05-28 16:45:01
【问题描述】:

我在下面有两张桌子。我想做一个查询来检查任何给定的日期(比如说在 A.Date_Added 之后 7 天),我想根据表 B 查看 ID 的当前状态。所以,在 A.Date_Added 之后 7 天,每个 ID 的最新状态是什么? 最终我想这样做 30 天、60 天等,但只有 7 天的逻辑可以应用于所有。

表 A:

ID Date_Added
1 12/04/2019
2 01/05/2020
3 03/04/2020

表 B:

ID Date_of_Status_Change Status
1 12/06/2020 Happy
1 01/08/2020 Sad
1 02/12/2020 Angry
2 01/07/2020 Sad
2 01/11/2020 Angry
2 02/24/2020 Sad
3 03/05/2020 Happy
3 03/08/2020 Confused

最终结果:

ID Date_Added Status_Seven_Days_After_Added
1 12/04/2019 Happy
2 01/05/2020 Angry
3 03/04/2020 Confused

【问题讨论】:

    标签: sql teradata


    【解决方案1】:
    select a.ID, a.Date_Added, b.Status
    from tableA as a
    join tableB as b
      on a.ID = b.ID 
      -- 7 days after A.Date_Added
     and b.Date_of_Status_Change between a.Date_Added and a.Date_Added +7
    qualify
       row_number(*) -- most recent status for each ID
       over (partition by a.ID
             order by b.Date_of_Status_Change desc) = 1
    

    如果某个 ID 没有匹配的行,您可能希望切换到左连接。

    【讨论】:

    • 我在 Teradata 论坛上使用了您的答案,您对此一无所知。没想到会得到你的答复——你是我工作场所的网红。非常感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2022-11-18
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多