Supondo que create_time contenha a hora em que o pedido foi criado e você deseja os 100 clientes com os pedidos mais recentes, você pode:
- adicione o create_time em sua consulta mais interna
- ordene os resultados de sua consulta externa pelo
create_time desc
- adicione uma consulta externa que filtre as primeiras 100 linhas usando
ROWNUM
Consulta:
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
ATUALIZAÇÃO para Oracle 12c
Com a versão 12.1, a Oracle introduziu "real" Top-N queries . Usando o novo
FETCH FIRST...
sintaxe, você também pode usar: 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)