输入:
表1
| ID|类别|
| --|--|
| 1 |螺柱|
| 2 |螺柱|
| 3 |螺柱|
表2
| ID|日期|
| --|--|
| 1 |2023年9月30日|
| 1 |2019 -09- 29 2019 -09- 29 2019 -09 - 29|
| 2 |2019 -09- 29 2019 -09- 29 2019 -09 - 29|
| 2 |2023年9月28日|
| 3 |2019 -08- 21 10:00:00|
输出
| ID|日期|结果|
| --|--|--|
| 1 |2023年9月30日|通过|
| 2 |2019 -09- 29 2019 -09- 29 2019 -09 - 29|通过|
| 3 |2019 -08- 21 10:00:00|失败|
这里的目标是创建基于2个输入表的输出表,这里的逻辑是,我试图获取每个id的每个月的最后一条记录,分别给出id和date列,因为id 2没有最后一天,也就是9月30日,我选择给定数据中的最后一天。
如果一个id在过去的10天内有一个条目,则下一个result列被框定为pass,否则学生的结果是fail,例如,id 3在过去的10天内没有日期条目,因此result是fail,而其他两个id的结果是pass
2条答案
按热度按时间xmd2e60i1#
您可以用途:
其中,对于样本数据:
输出:
| ID|日期_列|结果|
| --|--|--|
| 1 |2019 -03 - 12 00:00:00|通过|
| 2 |2019 - 02 - 22 00:00:00|通过|
| 3 |2023-08-21 00:00:00|失败|
| 3 |2023-09-22 00:00:00|失败|
fiddle
xghobddn2#
看起来第一个表是无关紧要的,因为你没有从中选择任何东西。如果你确实需要它(因为不是所有的ID在第二个表中都有匹配的行),可以将它与第二个表的外部联接一起使用。
根据预期结果,今天是2023年10月11日,因此没有行 * 通过 *,因为从所有涉及的日期起已经超过10天。这就是为什么我将限制设置为15天(第10行)。
样本数据:
查询方式:
如果涉及到其他列(根据您发布的评论,似乎是这样,但没有修改示例数据),那么一个选择是使用分析函数(如
row_number
或rank
),按ID和月份按降序对行进行 * 排序 *,然后获取排名最高的行。大概是这样的:
查询方式: