Zakładając, że create_time zawiera czas utworzenia zamówienia i chcesz mieć 100 klientów z najnowszymi zamówieniami, możesz:
- dodaj czas utworzenia w najgłębszym zapytaniu
- uporządkuj wyniki zewnętrznego zapytania według
create_time desc
- dodaj najbardziej zewnętrzne zapytanie, które filtruje pierwsze 100 wierszy za pomocą
ROWNUM
Zapytanie:
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
AKTUALIZACJA dla Oracle 12c
Wraz z wydaniem 12.1, Oracle wprowadziło "prawdziwe" zapytania Top-N
. Korzystanie z nowego FETCH FIRST...
składni, możesz również użyć:
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)