Oracle SQL查询完全扫描两次时出现问题?

Oracle SQL查询完全扫描两次时出现问题?,oracle,Oracle,表A 查询: select * from A where EMPNO = 100 and rownum <= 2 order by ID desc 我尝试了这个查询来检索max和max-1值;我需要比较max和max-1的等级,如果相等,我需要在不使用光标的情况下将标志设置为“Y”或“N”。另外,我不想扫描整个记录两次 请帮助我。ROWNUM在ORDER BY之前应用,因此您需要像这样嵌套查询: select * from (select * from A where EM

表A

查询:

select * 
from A 
where EMPNO = 100 
  and rownum <= 2 
order by ID desc 
我尝试了这个查询来检索max和max-1值;我需要比较max和max-1的等级,如果相等,我需要在不使用光标的情况下将标志设置为“Y”或“N”。另外,我不想扫描整个记录两次


请帮助我。

ROWNUM在ORDER BY之前应用,因此您需要像这样嵌套查询:

select * from
(select * from A where EMPNO =100 order by ID desc)
where rownum<=2

它只执行一次表扫描,或者可能使用EMPNO上的索引。

如何在此处解码?我需要检查rownum=1和rownum=2的等级,如果相等,我需要“Y”作为o/p或“N”
select *
from (
select id, emp_no, grade
       , case 
          when lag(grade) over (order by emp_no desc) = grade 
          then 'Y' 
          else 'N'     
          end
          as flag
      , dense_rank() over( order by emp_no desc)  as rank
from t
)
where rank <=2
;
select *
from (
select id, emp_no, grade
       , case 
          when lag(grade) over (order by emp_no desc) = grade 
          then 'Y' 
          else 'N'     
          end
          as flag
      , dense_rank() over( order by emp_no desc)  as rank
from t
)
where rank <=2
;