Dengan asumsi create_time berisi waktu pesanan dibuat, dan Anda menginginkan 100 klien dengan pesanan terbaru, Anda dapat:
- tambahkan create_time dalam kueri terdalam Anda
- urutkan hasil kueri luar Anda dengan
create_time desc
- tambahkan kueri terluar yang memfilter 100 baris pertama menggunakan
ROWNUM
Pertanyaan:
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
PERBARUI untuk Oracle 12c
Dengan rilis 12.1, Oracle memperkenalkan kueri Top-N "nyata"
. Menggunakan FETCH FIRST...
yang baru sintaks, Anda juga dapat menggunakan:
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)