आप विश्लेषणात्मक कार्यों का उपयोग कर सकते हैं जैसे ROW_NUMBER()
Oracle 11g
. के लिए एक सबक्वेरी के भीतर यह मानते हुए कि OFFSET 3 LIMIT 8
को कैप्चर करने के लिए आपको पंक्तियों को 3 और 8 के बीच रैंक करने की आवश्यकता है Oracle DB के भीतर तर्क (वास्तव में वे खंड संस्करण 12c+
के लिए शामिल हैं ), जब भी परिणाम CREATE_DATE
. द्वारा समूहीकृत किया जाना चाहिए और ID
. द्वारा आदेश दिया गया विभागों के :
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;
जो बिल्कुल 6 returns लौटाता है (8-3+1) पंक्तियाँ। यदि आपको संबंध शामिल करने की आवश्यकता है (प्रत्येक निर्माण तिथि के लिए विभाग की पहचान के लिए समान मान), ROW_NUMBER()
DENSE_RANK()
called नामक एक अन्य विंडो फ़ंक्शन के साथ प्रतिस्थापित किया जाना चाहिए क्योंकि क्वेरी के अन्य सभी भाग समान रहते हैं। कम से कम 6 इस मामले में रिकॉर्ड वापस आ जाएंगे।