输入:
表1
id | 类别 |
---|---|
1 | 螺柱 |
2 | 螺柱 |
3 | 螺柱 |
表2
id | 日期 |
---|---|
1 | 2023年9月30日 |
1 | 2023年9月29日 |
2 | 2023年9月29日 |
2 | 2023年9月28日 |
3 | 2023年8月15日 |
输出
id | 日期 | 结果 |
---|---|---|
1 | 2023年9月30日 | 通过 |
2 | 2023年9月29日 | 通过 |
3 | 2023年8月15日 | 失败 |
这里的目标是基于 2 个输入表创建输出表,这里的逻辑是我试图为每个 id 获取每个月的最后一条记录,分别给出 id 和日期列,因为 id 2 没有最后一个记录9 月 30 日是一个月中的某一天,我选择给定数据中可用的最后一天。
如果“id”在过去 10 天内有条目,则下一个“结果”列被框定为“通过”,否则该学生的结果为“失败”,例如 id 3 在过去 10 天内没有日期条目天,所以结果是失败,而其他两个id的结果是通过
看起来第一个表不相关,因为您没有从中选择任何内容。如果您确实需要它(因为并非所有 ID 在第二个表中都有匹配的行),请将其与第二个表的外连接一起使用。
根据预期结果,今天是 2023 年 10 月 11 日,因此没有行通过,因为距离所有涉及的日期已经过去 10 天以上了。这就是为什么我将限制设置为 15 天(第 10 行)。
样本数据:
SQL> with t2 (id, datum) as
2 (select 1, date '2023-09-30' from dual union all
3 select 1, date '2023-09-29' from dual union all
4 select 2, date '2023-09-29' from dual union all
5 select 2, date '2023-09-28' from dual union all
6 select 3, date '2023-08-15' from dual
7 )
查询:
8 select id,
9 max(datum) datum,
10 case when trunc(sysdate) - max(datum) <= 15 then 'pass'
11 else 'fail'
12 end as result
13 from t2
14 group by id;
ID DATUM RESULT
---------- ---------- -------
1 30-09-2023 pass
2 29-09-2023 pass
3 15-08-2023 fail
SQL>