Supponendo che create_time contenga l'ora in cui è stato creato l'ordine e desideri i 100 clienti con gli ultimi ordini, puoi:
- aggiungi create_time nella tua query più intima
- ordina i risultati della tua query esterna in base al
create_time desc
- aggiungi una query più esterna che filtri le prime 100 righe utilizzando
ROWNUM
Domanda:
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
AGGIORNAMENTO per Oracle 12c
Con la versione 12.1, Oracle ha introdotto "real" Top-N query
. Usando il nuovo FETCH FIRST...
sintassi, puoi anche usare:
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)