Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle SQL:il filtro per ROWNUM non restituisce risultati quando dovrebbe

Non puoi usare rownum come questo. rownum viene calcolato quando i valori vengono effettivamente restituiti dalla query, solo quando viene restituita una riga. Da qui l'affermazione:

where rownum = 2

non restituirà mai un valore, perché è necessario che ci sia un "1" prima di un "2".

Se utilizzi Oracle 12+, puoi utilizzare offset clausola con fetch first <n> rows only . Nelle versioni precedenti, puoi utilizzare row_number() over () per calcolare un numero di riga come colonna e utilizzarlo nel where .

In realtà, la tua query utilizza già una sottoquery, quindi puoi fare qualcosa del tipo:

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))