Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL:Filtrando por ROWNUM não retornando resultados quando deveria


Você não pode usar rownum assim. rownum é calculado quando os valores são realmente retornados da consulta -- somente quando uma linha é retornada. Daí a afirmação:
where rownum = 2

nunca retornará um valor, porque precisa haver um "1" antes de um "2".

Se você estiver usando o Oracle 12+, poderá usar o offset cláusula com fetch first <n> rows only . Em versões anteriores, você pode usar row_number() over () para calcular um número de linha como uma coluna e usá-lo no where .

Na verdade, sua consulta já usa uma subconsulta, então você pode fazer 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))