Za předpokladu, že create_time obsahuje čas vytvoření objednávky a chcete 100 klientů s nejnovějšími objednávkami, můžete:
- přidejte do svého nejvnitřnějšího dotazu hodnotu create_time
- uspořádejte výsledky vnějšího dotazu podle
create_time desc
- přidat nejvzdálenější dotaz, který filtruje prvních 100 řádků pomocí
ROWNUM
Dotaz:
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
AKTUALIZACE pro Oracle 12c
Ve verzi 12.1 společnost Oracle představila "skutečné" Top-N dotazy
. Pomocí nového FETCH FIRST...
syntaxi, můžete také použít:
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)