Giả sử rằng create_time chứa thời gian đơn đặt hàng được tạo và bạn muốn có 100 khách hàng có đơn đặt hàng mới nhất, bạn có thể:
- thêm create_time trong truy vấn trong cùng của bạn
- sắp xếp các kết quả của truy vấn bên ngoài của bạn theo
create_time desc
- thêm một truy vấn ngoài cùng lọc 100 hàng đầu tiên bằng cách sử dụng
ROWNUM
Truy vấn:
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
CẬP NHẬT cho Oracle 12c
Với bản phát hành 12.1, Oracle đã giới thiệu truy vấn Top-N "thực"
. Sử dụng FETCH FIRST...
mới cú pháp, bạn cũng có thể sử dụng:
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)