Home > Software engineering >  Oracle: Retrieving specific group of records based by date
Oracle: Retrieving specific group of records based by date

Time:01-28

I have a table in oracle that I'm trying to write a query for but having a problem writing it correctly. The data of the table looks like this:

Name ID DATE
Shane 1 01JAN2023
Angie 2 02JAN2023
Shane 1 02JAN2023
Austin 3 03JAN2023
Shane 1 03JAN2023
Angie 2 03JAN2023
Tony 4 05JAN2023

What I was trying to come up with was a way to iterate over each day, look at all the records for that day and compare with the rest of the records in the table that came before it and only pull back the first instance of the record based on the ID & Date. The expected output would be:

Name ID DATE
Shane 1 01JAN2023
Angie 2 02JAN2023
Austin 3 03JAN2023
Tony 4 05JAN2023

Can anyone tell me what the query should be to accomplish this? Thank you in advance.

CodePudding user response:

You'll need to convert your date field to a real date so it orders correctly

SELECT name,id,MIN(TO_DATE(date,'DDMONYYYY')) date
  FROM table
 GROUP BY name,id

CodePudding user response:

Isn't that just

select name, id, min(date_column)
from your_table
group by name, id;

CodePudding user response:

If you don't want to use aggregation, you can use FETCH NEXT ROWS WITH TIES:

SELECT tab.* 
FROM tab
ORDER BY ROW_NUMBER() OVER(PARTITION BY Name, Id ORDER BY DATE_)
FETCH NEXT 1 ROWS WITH TIES

Output:

NAME ID DATE_
Angie 2 02-JAN-23
Austin 3 03-JAN-23
Shane 1 01-JAN-23
Tony 4 05-JAN-23

Check the demo here.

  • Related