当单行不为空时,则不返回任何与Oracle SQL

r55awzrz  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(145)

在Oracle Dev中查询表时,我需要忽略任何不具有空日期的ID。
一个ID可以返回多次,例如5次,4次可以返回空日期,但其中一次可能返回01.01.2022,在这种情况下,需要忽略所有日期。
下面是SQL:

SELECT 
ID,
ACTIVATION_DATE,
ACCEPTED_DATE
FROM TABLE
WHERE ACCEPTED_DATE IS NOT NULL 
--AND ACTIVATION_DATE IS NULL 
AND ID IN ('AA1','AA2');

结果是:
| 识别码|激活日期|接受日期|
| - -|- -|- -|
| AA 1型||2022年4月1日|
| AA 1型||2022年3月15日|
| AA 1型|2022年8月22日|2022年6月7日|
| AA 1型||2022年5月11日|
| AA 2型||2022年6月6日|
| AA 2型|2022年9月25日|2021年12月12日|
您可以看到AA 1提取了4行,但因为它只有一个激活日期,所以现在需要忽略它们。如果我在其中保留AND ACTIVATION_DATE IS NULL,它仍将返回空白行,需要完全忽略这些行。
假设这将需要一个子查询?任何帮助将不胜感激!
我已经尝试了上面的SQL查询

cnh2zyt3

cnh2zyt31#

使用COUNT解析函数:

SELECT id,
       activation_date,
       accepted_date
FROM   (
  SELECT id,
         activation_date,
         accepted_date,
         COUNT(activation_date) OVER (PARTITION BY id) AS num_active
  FROM   table_name
  WHERE  accepted_date IS NOT NULL 
  AND    id IN ('AA1','AA2')
)
WHERE  num_active = 0;
xzlaal3s

xzlaal3s2#

我会尝试使用not exists
示例数据:

SQL> WITH
  2     table1 (id, activation_date, accepted_date)
  3     AS
  4        (SELECT 'AA1', NULL             , DATE '2022-04-01' FROM DUAL UNION ALL
  5         SELECT 'AA1', NULL             , DATE '2022-03-15' FROM DUAL UNION ALL
  6         SELECT 'AA1', DATE '2022-08-22', DATE '2022-06-07' FROM DUAL UNION ALL
  7         SELECT 'AA2', DATE '2022-09-25', DATE '2021-12-12' FROM DUAL)

查询从此处开始:

8  SELECT id, activation_date, accepted_date
  9    FROM table1 a
 10   WHERE     id IN ('AA1', 'AA2')
 11         AND NOT EXISTS
 12                (SELECT NULL
 13                   FROM table1 b
 14                  WHERE     b.id = a.id
 15                        AND b.activation_date IS NULL);

ID  ACTIVATION ACCEPTED_D
--- ---------- ----------
AA2 25/09/2022 12/12/2021

SQL>

结果中排除AA1,因为它的activation_date中包含NULL值。返回AA2,因为它的activation_date不为空。

相关问题