Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle SQL :le filtrage par ROWNUM ne renvoie pas de résultats alors qu'il le devrait

Vous ne pouvez pas utiliser rownum comme ça. rownum est calculé lorsque les valeurs sont réellement renvoyées par la requête, uniquement lorsqu'une ligne est renvoyée. D'où l'énoncé :

where rownum = 2

ne renverra jamais de valeur, car il doit y avoir un "1" avant un "2".

Si vous utilisez Oracle 12+, vous pouvez utiliser le offset clause avec fetch first <n> rows only . Dans les versions antérieures, vous pouvez utiliser row_number() over () pour calculer un numéro de ligne comme une colonne et l'utiliser dans le where .

En fait, votre requête utilise déjà une sous-requête, vous pouvez donc faire quelque chose comme :

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