0

When querying a table in Oracle Dev I need to ignore any ID that doesn't have a null date.

An ID can be returned multiple times e.g. 5 times, 4 can have a null date but one might have 01.01.2022 in which case all of them need to be ignored.

Here is the 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');

And the result:

ID ACTIVATION_DATE ACCEPTED_DATE
AA1 01/04/2022
AA1 15/03/2022
AA1 22/08/2022 07/06/2022
AA1 11/05/2022
AA2 06/06/2022
AA2 25/09/2022 12/12/2021

You can see AA1 has pulled 4 rows but because it has one activation date, they now all need to be ignored. If I leave AND ACTIVATION_DATE IS NULL in there it will still return the blank rows, which need to be ignored altogether.

Assume this will need to be a subquery? Any help would be much appreciated!

I have tried the SQL query as above

2
  • every ACCEPTED_DATE have different date that you get four same rows, in other ACTIVATION_DATE rows are just blank in table i think Commented Nov 10, 2022 at 12:30
  • In your example you should get no data back, right; AA2 should also be excluded because it has a non-null activation date? Commented Nov 10, 2022 at 12:37

2 Answers 2

2

Use the COUNT analytic function:

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;
Sign up to request clarification or add additional context in comments.

Comments

0

I'd try with not exists:

Sample data:

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)

Query begins here:

  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 is excluded from result as it contains NULL values in activation_date. AA2 is being returned as its activation_date isn't empty.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.