この動作を説明するには、OracleがROWNUMを処理する方法を理解する必要があります。 ROWNUMを行に割り当てる場合、Oracleは1から開始し、行が選択されたときにのみ値をインクリメントします。つまり、WHERE句のすべての条件が満たされた場合です。この条件ではROWNUMが2より大きい必要があるため、行は選択されず、ROWNUMが1を超えてインクリメントされることはありません。
肝心なのは、次のような条件が期待どおりに機能するということです。
.. WHERE rownum =1;
.. WHERE rownum <=10;
これらの条件のクエリは常にゼロ行を返します。
.. WHERE rownum =2;
.. WHERE rownum> 10;
Oraclerownumの理解からの引用
動作させるには、次のようにクエリを変更する必要があります。
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
編集 :クエリを修正して、後の行番号を取得しました saldescによる注文