Nie możesz użyć rownum
lubię to. rownum
jest obliczana, gdy wartości są faktycznie zwracane z zapytania — tylko wtedy, gdy zwracany jest wiersz. Stąd stwierdzenie:
where rownum = 2
nigdy nie zwróci wartości, ponieważ musi być „1” przed „2”.
Jeśli używasz Oracle 12+, możesz użyć offset
klauzula z fetch first <n> rows only
. We wcześniejszych wersjach możesz użyć row_number() over ()
aby obliczyć numer wiersza jako kolumnę i użyć go w where
.
W rzeczywistości Twoje zapytanie korzysta już z podzapytania, więc możesz zrobić coś takiego:
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))