Ervan uitgaande dat create_time de tijd bevat waarop de bestelling is gemaakt, en u wilt de 100 klanten met de laatste bestellingen, kunt u:
- voeg de create_time toe aan je diepste zoekopdracht
- orden de resultaten van uw buitenste zoekopdracht volgens de
create_time desc
- voeg een buitenste zoekopdracht toe die de eerste 100 rijen filtert met
ROWNUM
Vraag:
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 voor Oracle 12c
Met release 12.1 introduceerde Oracle "real" Top-N queries
. Met behulp van de nieuwe FETCH FIRST...
syntaxis, kunt u ook gebruiken:
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)