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
Autorin: Friederike
Tags: Datenbanken Oracle