以下查询结果似乎与我不一致.
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)
如何一致地检索该中间行?
查询有
WHERE ROWNUM = X或WHERE 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)
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |