首页 > 解决方案 > SQL / Teradata - 如何从一个表中获取与另一个表中的日期列相关的最新记录?

问题描述

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

表 A:

ID 添加日期
1 2019 年 12 月 4 日
2 2020 年 1 月 5 日
3 2020 年 3 月 4 日

表 B:

ID Date_of_Status_Change 地位
1 2020 年 12 月 6 日 快乐的
1 2020 年 1 月 8 日 伤心
1 2020 年 2 月 12 日 生气的
2 2020 年 1 月 7 日 伤心
2 2020 年 1 月 11 日 生气的
2 2020 年 2 月 24 日 伤心
3 2020 年 3 月 5 日 快乐的
3 2020 年 3 月 8 日 使困惑

最终结果:

ID 添加日期 Status_Seven_Days_After_Added
1 2019 年 12 月 4 日 快乐的
2 2020 年 1 月 5 日 生气的
3 2020 年 3 月 4 日 使困惑

标签: sqlteradata

解决方案


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 没有匹配的行,您可能希望切换到左连接。


推荐阅读