sql >> Base de Datos >  >> RDS >> Oracle

Oracle SQL:el filtrado por ROWNUM no devuelve resultados cuando debería

No puede usar rownum como esto. rownum se calcula cuando los valores se devuelven realmente de la consulta, solo cuando se devuelve una fila. Por lo tanto, la declaración:

where rownum = 2

nunca devolverá un valor, porque debe haber un "1" antes de un "2".

Si está usando Oracle 12+, puede usar el offset cláusula con fetch first <n> rows only . En versiones anteriores, puede usar row_number() over () para calcular un número de fila como una columna y usarlo en el where .

En realidad, su consulta ya usa una subconsulta, por lo que puede hacer algo como:

select *
from (select . . .,
             row_number() over (order by Request_ID, Actual_Start_Date) as rn
      . . .
     ) t
WHERE rn < (1000000 * to_Number(:X) and)
      rn >= (1000000 * (to_Number(:X)-1))