Om du antar att create_time innehåller tiden då beställningen skapades och du vill ha de 100 kunderna med de senaste beställningarna, kan du:
- lägg till create_time i din innersta fråga
- ordna resultaten av din yttre fråga efter
create_time desc
- lägg till en yttersta fråga som filtrerar de första 100 raderna med
ROWNUM
Fråga:
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
UPPDATERING för Oracle 12c
Med version 12.1 introducerade Oracle "riktiga" Top-N-frågor
. Använder den nya FETCH FIRST...
syntax kan du också använda:
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)