Oracle? Oracle!

Aufgabe:

Zeige mir nur die fünf neuesten Datensätze des Tages an – und zwar aufsteigend sortiert (und mach es etwas hübscher).

Die Lösung:

SELECT ZEIT, AKTION, DETAILS FROM
(
SELECT SUBSTR(TO_CHAR(TIMEDATE, 'DD-MON-YYYY HH24:MI:SS'),1,24) ZEIT, SUBSTR(ACTION,1,10) AKTION, SUBSTR(DESCRIPTION,1,66) DETAILS, TIMEDATE FROM STATUS WHERE TIMEDATE > TO_DATE(TO_CHAR(SYSDATE,'DD-MON-YYYY')) ORDER BY TIMEDATE DESC
)
WHERE ROWNUM <= 5 ORDER BY TIMEDATE /

Datum einschränken

TIMEDATE > TO_DATE(TO_CHAR(SYSDATE,'DD-MON-YYYY'))
Hier wird das Systemdatum durch zweifache Konvertierung seiner Uhrzeit beraubt und im Vergleich wird alles, was auf dem gleichen Datum liegt, aber später als 0:00 Uhr ist ausgegeben.

Benutzung von ROWNUM

In der inneren Abfrage werden die Datensätze absteigend nach TIMEDATE (eine Spalte mit Datum inkl. Uhrzeit) sortiert. In der äußeren Abfrage erhalten sie (siehe AskTom) eine neue ROWNUM (die ROWNUM der inneren Abfrage interessiert hier nicht), werden durch die Klausel

WHERE ROWNUM <= 5 ORDER BY TIMEDATE

auf 5 Datensätze eingeschränkt und danach aufsteigend sortiert.

Nicht verstanden? Macht nichts, wer sagt, dass Oracle einfach ist?