我正在使用 Teradata,但有一种情况我不确定如何使用 SQL 查询来实现它。我有一张包含以下数据的表格。该表根据 GP、Key1、Key2 和 Key3 列进行分组。现在我的要求是,我需要从列处理日期中填充一些 ID 的开始日期。
GP | ID | 开始日期 | 处理日期 | 键1 | 键2 | 键3 |
---|---|---|---|---|---|---|
W1 | W003 | 当前日期 | 2023-04-24 | 1asd | 345 | 456 |
W1 | W004 | 2024-08-20 | 1asd | 345 | 456 | |
W1 | W005 | 2024-08-21 | 1asd | 345 | 456 | |
W1 | W0010 | 2024-08-22 | 1asd | 345 | 456 | |
W1 | W0120 | 2024-08-23 | 1asd | 345 | 456 | |
W1 | W0015 | 2024-08-24 | 1asd | 345 | 456 | |
W1 | W0016 | 2024-08-25 | 1asd | 345 | 456 | |
W2 | W234 | 当前日期 | 2021-05-27 | 2def | 111 | 222 |
W2 | W345 | 2022-03-21 | 2def | 111 | 222 | |
W2 | W456 | 2023-03-21 | 2def | 111 | 222 |
现在的情况是,在值为 W004 和 W005 的列 ID 中,我需要将开始日期填充为从 W003 开始的流程日期。
类似地,在值 W0010、W0120、W0015 和 W0016 的列 ID 中,我需要将开始日期填充为从 W005 开始的流程日期
当涉及到 ID W345 和 W456 时,开始日期需要与 W234 流程开始日期一起填充。
结果表应如下所示
我知道我们可以多次连接同一张表并尝试实现这一点,但我只是在想我们是否可以使用单个查询来实现它。请注意,需要填充开始日期的 ID 的连接以及我们从中获取值的 ID 不会改变。例如 W004 和 W005 始终从 W003 中获取值,就像 W0010、W0120、W0015 和 W0016 始终从 W005 中获取值一样
听起来像是使用窗口聚合的条件聚合的变体: