Angenommen, create_time enthält die Zeit, zu der die Bestellung erstellt wurde, und Sie möchten die 100 Kunden mit den letzten Bestellungen, können Sie:
- fügen Sie die create_time in Ihrer innersten Abfrage hinzu
- Ordnen Sie die Ergebnisse Ihrer äußeren Abfrage nach
create_time desc
- Fügen Sie eine äußerste Abfrage hinzu, die die ersten 100 Zeilen mit
ROWNUM
filtert
Abfrage:
SELECT * FROM (
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn=1
ORDER BY create_time desc
) WHERE rownum <= 100
UPDATE für Oracle 12c
Mit Release 12.1 hat Oracle "echte" Top-N-Abfragen
eingeführt . Mit dem neuen FETCH FIRST...
Syntax, Sie können auch verwenden:
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn = 1
ORDER BY create_time desc
FETCH FIRST 100 ROWS ONLY)