根据条件sql标记通过或失败

问题描述 投票:0回答:1

输入:

表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的结果是通过

sql oracle date join where-clause
1个回答
0
投票

看起来第一个表不相关,因为您没有从中选择任何内容。如果您确实需要它(因为并非所有 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>
© www.soinside.com 2019 - 2024. All rights reserved.