我正在尝试进行 Oracle SQL Developer 查询以返回仅满足特定条件的项目。我面临的问题是一个项目可以有多个条件,并且根据这些条件我需要过滤掉结果。所以它需要某种数组或在选择中选择?
数据集如下所示:
商品编号 | 状况 | 日期 |
---|---|---|
1234 | A | 9999-99-99 |
1234 | B | 9999-99-99 |
1234 | B | 9999-99-99 |
5555 | A | 9999-99-99 |
5555 | B | 2024-12-10 |
现在,仅当条件 B 日期不是 9999-99-99 或大于条件 A 日期时,我才需要返回没有分配给该项目的条件 B 的项目。
所以本质上项目 1234 不应该被返回,因为它有 2x 条件 B,日期等于条件 A,并且日期也是 9999-99-99。
项目 5555 应返回,因为即使它具有条件 B,但日期小于条件 A。
目前我有这个:
select ItemNo from DataSet where Condition not in 'B' and Date between :a and :b
我正在考虑创建一个查询来选择所有项目而不检查条件,然后可能将其嵌套到另一个选择中,该选择将检查每个项目是否有多个冲突条件,但不确定这是否是正确的方法。
SELECT ItemNo
FROM (
SELECT
ItemNo,
MAX(CASE WHEN Condition = 'A' THEN Date1 END) AS DateA,
MAX(CASE WHEN Condition = 'B' THEN Date1 END) AS DateB
FROM test
GROUP BY ItemNo
) conditions
WHERE (
(DateB IS NULL)
OR
(DateB != TO_DATE('9999-12-31', 'YYYY-MM-DD') AND DateB < DateA)
);
输出