Ако приемем, че create_time съдържа часа на създаване на поръчката и искате 100 клиента с най-новите поръчки, можете:
- добавете create_time във вашата най-вътрешна заявка
- подредете резултатите от вашата външна заявка по
create_time desc
- добавете най-външна заявка, която филтрира първите 100 реда с помощта на
ROWNUM
Заявка:
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
АКТУАЛИЗАЦИЯ за Oracle 12c
С версия 12.1 Oracle въведе "истински" Top-N заявки
. Използвайки новия FETCH FIRST...
синтаксис, можете също да използвате:
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)