SQL / Teradata - 如何从一个 table 与另一个 TABLE 中的日期列相关的记录中获取最新记录?
SQL / Teradata - How can I get the most recent record from one table RELEVANT TO A DATE COLUMN IN ANOTHER TABLE?
下面有两个表格。我想查询检查任何给定日期(假设 A.Date_Added 后 7 天),我想根据 Table B 查看 ID 的当前状态。 所以, A.Date_Added 7 天后,每个 ID 的最新状态是什么? 最后我想做 30 天、60 天等,但只能应用 7 天的逻辑给大家。
Table答:
ID
Date_Added
1
12/04/2019
2
01/05/2020
3
03/04/2020
Table乙:
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
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 没有匹配的行,您可能想要切换到 Left Join。
下面有两个表格。我想查询检查任何给定日期(假设 A.Date_Added 后 7 天),我想根据 Table B 查看 ID 的当前状态。 所以, A.Date_Added 7 天后,每个 ID 的最新状态是什么? 最后我想做 30 天、60 天等,但只能应用 7 天的逻辑给大家。
Table答:
ID | Date_Added |
---|---|
1 | 12/04/2019 |
2 | 01/05/2020 |
3 | 03/04/2020 |
Table乙:
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 |
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 没有匹配的行,您可能想要切换到 Left Join。