表 A
ID EmpNo Grade
--------------------
1 100 HIGH
2 105 LOW
3 100 MEDIUM
4 100 LOW
5 105 LOW
查询:
select *
from A
where EMPNO = 100
and rownum <= 2
order by ID desc
我尝试此查询来检索最大值和最大值 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 上的索引)。
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
;