Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL:Filtern nach ROWNUM gibt keine Ergebnisse zurück, wenn es sollte

Sie können rownum nicht verwenden so was. rownum wird berechnet, wenn die Werte tatsächlich von der Abfrage zurückgegeben werden – nur wenn eine Zeile zurückgegeben wird. Daher die Aussage:

where rownum = 2

wird niemals einen Wert zurückgeben, da eine "1" vor einer "2" stehen muss.

Wenn Sie Oracle 12+ verwenden, können Sie den offset verwenden -Klausel mit fetch first <n> rows only . In früheren Versionen können Sie row_number() over () verwenden um eine Zeilennummer als Spalte zu berechnen und diese im where zu verwenden .

Tatsächlich verwendet Ihre Abfrage bereits eine Unterabfrage, sodass Sie Folgendes tun können:

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