Finde den aktuellsten Wert in einer Oracle-Tabelle

Wenn man eine Tabelle mit mehreren Einträgen hat und nur den letzten aktuellsten wert herausfinden möchte, gibt es mehrere Möglichkeiten diesen herauszufinden. Ich habe letzte Woche beim googlen eine äußerst clevere Lösung gefunden, die ich gern teilen möchte.

Gehen wir von folgender Tabelle aus:

select * from test_table;

ID  FILE_NAME    FILE_TYPE  ADD_DATE
--- ------------ ---------- ------------
1   eins.txt     txt        01-JAN-12
2   zwei.csv     csv        08-JAN-12
3   drei.sql     sql        12-FEB-12
4   vier.txt     txt        21-FEB-12
5   fuenf.sql    sql        29-FEB-12

Um die aktuellste Datei zu finden (fuenf.sql) könnte man nun nach dem Datum filtern:

select * 
from test_table 
where ADD_DATE = (select max(ADD_DATE) from test_table);

Möchte man allerdings für jeden Dateityp die jeweils aktuellste Datei haben wird eine solche Unterabfrage komplex und kostenintensiver. Elegant geht es mit analytischen Funktionen, die in Oracle ab Version 9.0.1 verfügbar sind:

select  
   max(FILE_NAME) keep (dense_rank last order by ADD_DATE),
   FILE_TYPE,
   max(ADD_TIME) as ADD_TIME
from test_table
group by FILE_TYPE;

FILE_NAME    FILE_TYPE  ADD_DATE
------------ ---------- ------------
zwei.csv     csv        08-JAN-12
vier.txt     txt        21-FEB-12
fuenf.sql    sql        29-FEB-12

social