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を返します (8-3 + 1)行。同点(各作成日の部門IDの等しい値)を含める必要がある場合は、ROW_NUMBER()
DENSE_RANK()
と呼ばれる別のウィンドウ関数に置き換える必要があります クエリの他のすべての部分は同じままです。 少なくとも6 この場合、レコードが返されます。