Puede utilizar funciones analíticas como ROW_NUMBER()
dentro de una subconsulta para Oracle 11g
suponiendo que necesita clasificar las filas entre el 3.º y el 8.º para capturar el OFFSET 3 LIMIT 8
dentro de la base de datos de Oracle (de hecho, esas cláusulas se incluyen para las versiones 12c+
), siempre que el resultado deba agruparse por CREATE_DATE
y ordenado por el ID
de los departamentos :
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;
que devuelve exactamente 6 (8-3+1) filas. Si necesita incluir los vínculos (los valores iguales para las identidades de departamento para cada fecha de creación), ROW_NUMBER()
debe reemplazarse con otra función de ventana llamada DENSE_RANK()
ya que todas las demás partes de la consulta siguen siendo las mismas. Al menos 6 los registros regresarían en este caso.