这里的目的是根据3个输入表创建输出表,逻辑是为每个id获取每个月的最后一条记录,每个id分别给出id和日期(日期列将从表2而不是表3中提取),因为id 2没有月份的最后一天,即6月30日,我选择给定数据中可用的最后一天。
这个问题与一个老问题类似,所以我在这里提到两个问题之间的区别:如果“id”在表2或表3中的该日期(而不是当前系统日期)的过去30天内至少有一次日期条目,则“result”列的框架为“pass”,否则学生的结果为fail。
输入:
表1
| ID|类别|
| --|--|
| 1 |螺柱|
| 2 |螺柱|
| 3 |螺柱|
表2
| ID|日期|
| --|--|
| 1 |2023年9月30日|
| 1 |2019 -09- 29 2019 -09- 29 2019 -09 - 29|
| 2 |2023年6月25日|
| 3 |2019 -08- 21 10:00:00|
表3:
| ID|日期|
| --|--|
| 1 |2023年9月30日|
| 1 |2019 -09- 29 2019 -09- 29 2019 -09 - 29|
| 1 |2019 -08- 29 2019 -08- 29|
| 2 |2023年5月29日|
| 3 |2019 -07- 22 2019 - 07 - 22|
输出
| ID|日期|结果|
| --|--|--|
| 1 |2023年9月30日|通过|
| 1 |2019 -08- 29 2019 -08- 29|失败|
| 2 |2019 -06- 21 2019 -06 - 21|通过|
| 2 |2023年5月29日|失败|
| 3 |2019 -08- 21 10:00:00|通过|
| 3 |2019 -07- 22 2019 - 07 - 22|失败|
输出中结果列的说明:
9月的id 1是“通过”,因为它在9月30日之后的30天内在表2或表3中有一个日期条目
八月的id 1是“失败”,因为它在表1和表2中没有从八月29日起的过去30天内的日期条目
6月的id 2是“pass”,因为它在表3中有一个过去30天的日期条目,而5月的id 2是“failed”,依此类推
1条答案
按热度按时间ttygqcqt1#
这实际上与your previous question相同,但使用
LAG
/LEAD
分析函数来查找前一个日期,而不是使用SYSDATE
:其中,对于样本数据:
输出:
| ID|日期_列|结果|
| --|--|--|
| 1 |2019 -04 - 22 00:00:00|通过|
| 2 |2019 -03 - 12 00:00:00|通过|
| 3 |2019 -08-22 00:00:00|失败|
| 3 |2023-09-25 00:00:00|通过|
fiddle