Oracle SQL Query rownum不一致

Pat*_* II 1 sql oracle

以下查询结果似乎与我不一致.

select OUTCOME from (select OUTCOME, NUMBER1 
                       from TASK
                       order by TASK_NUMBER desc)
  where NUMBER1 = 1500
Run Code Online (Sandbox Code Playgroud)

返回3行

1: (null)
2: Expected Outcome
3: Some other previous outcome
Run Code Online (Sandbox Code Playgroud)

添加ROWNUM=2,这是我想要的行.

select OUTCOME from (select OUTCOME, NUMBER1
                       from TASK
                       order by TASK_NUMBER desc)
  where NUMBER1 = 1500 and
        ROWNUM=2
Run Code Online (Sandbox Code Playgroud)

结果1: (null)不是预期的结果1: Expected Outcome

如果我尝试ROWNUM=1接收,那么在那种情况下我会期待的是1: (null)

如何一致地检索该中间行?

yam*_*mny 6

查询有WHERE ROWNUM = XWHERE ROWNUM > X没有意义.这是因为ROWNUM在谓词评估期间将值分配给行,并且仅在行通过WHERE子句后才会增加 .

资源

select OUTCOME from
  (select OUTCOME, NUMBER1, ROWNUM RN from TASK order by TASK_NUMBER desc)
where NUMBER1 = 1500 and RN=2
Run Code Online (Sandbox Code Playgroud)

编辑

实际上,上面的解决方案是假的,因为ROWNUM将在ORDER BY子句之前分配.没有使用ROW_NUMBER()(像zaratustra的答案),正确的解决方案是:

select OUTCOME from (
  select ROWNUM RN, OUTCOME, NUMBER1
    from (select OUTCOME, NUMBER1 from TASK order by TASK_NUMBER desc)
) where NUMBER1 = 1500 and RN=2
Run Code Online (Sandbox Code Playgroud)