Bạn có thể sử dụng các hàm Phân tích như ROW_NUMBER()
trong một truy vấn con cho Oracle 11g
giả sử bạn cần xếp các hàng từ thứ 3 đến thứ 8 để nắm bắt được OFFSET 3 LIMIT 8
logic trong Oracle DB ( thực sự những mệnh đề đó được bao gồm cho các phiên bản 12c+
), bất cứ khi nào kết quả phải được nhóm theo CREATE_DATE
và sắp xếp theo ID
của các phòng ban:
SELECT q.*
FROM (SELECT DEPT.ID rowobjid,
DEPT.CREATOR createdby,
DEPT.CREATE_DATE createddate,
DEPT.UPDATED_BY updatedby,
DEPT.LAST_UPDATE_DATE updateddate,
DEPT.NAME name,
DEPT.STATUS status,
statusT.DESCR statusdesc,
REL.ROWID_DEPT1 rowidDEPT1,
REL.ROWID_DEPT2 rowidDEPT2,
DEPT2.DEPT_FROM_VAL parentcid,
DEPT2.NAME parentname,
ROW_NUMBER() OVER (PARTITION BY DEPT.CREATE_DATE ORDER BY DEPT.ID) AS rn
FROM TEST.DEPT_TABLE DEPT
LEFT JOIN TEST.STATUS_TABLE statusT
ON DEPT.STATUS = statusT.STATUS
LEFT JOIN TEST.C_REL_DEPT rel
ON DEPT.ID = REL.ROWID_DEPT2
LEFT JOIN TEST.DEPT_TABLE DEPT2
ON REL.ROWID_DEPT1 = DEPT2.ID) q
WHERE rn BETWEEN 3 AND 8;
trả về chính xác 6 (8-3 + 1) hàng. Nếu bạn cần bao gồm các mối quan hệ (các giá trị bằng nhau cho danh tính bộ phận cho mỗi ngày tạo), ROW_NUMBER()
nên được thay thế bằng một hàm cửa sổ khác có tên là DENSE_RANK()
vì tất cả các phần khác của truy vấn vẫn giữ nguyên. Ít nhất 6 hồ sơ sẽ trả lại trong trường hợp này.