Причина, по которой where rownum = 3
возвращает пустой набор строк, заключается в том, что условие не является истинным для первой строки. Для второй строки все еще нет первой строки в наборе результатов, и rownum
по-прежнему 1
. Таким образом, условие снова не выполняется. См. эту страницу для более подробного объяснения.
Вы можете использовать row_number()
в подзапросе:
select *
from (
select row_number() over (order by col1) as rn, yt.*
from YourTable yt
) sub
where rn = 3
Или даже проще, но, возможно, более запутанно, используя rownum
:
select *
from (
select rownum as rn, yt.*
from YourTable yt
) sub
where rn = 3