sql - 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 日 | 使困惑 |
解决方案
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 没有匹配的行,您可能希望切换到左连接。
推荐阅读
- r - 如何更改shinyWidgets包的pickerInput的字体大小
- r - 将行值拆分为 R 数据框中的多行
- java - 如何使用 EclipseLink Moxy 使用注释指定 XML 命名空间、schemaLocation 和命名空间 URI?
- reactjs - Firebase 身份验证 - 如何构建我的反应原生应用程序?
- python - 模拟 Jira REST API 调用
- node.js - 使用 Drvine 和 Neo4j,如何将查询内联为字符串,而不是注入单独的文件
- linux - ffmpeg:加载共享库时出错:libopenh264.so.5
- git - 如何在我的会话中忽略推送中的 webhook?
- php - 雄辩的获取所有列,但检查一个不同的列
- flutter - Flutter 识别循环或 listview.builder 构建的 Widget