oracle 取第一条记录可以用下面的方式实现,为什么不能用同样的方法取第二条记录
select pac_period_id from (select cpp.pac_period_id
,cpp.period_name
from cst_pac_periods cpp
where cpp.legal_entity = 102
order by cpp.pac_period_id desc)
where rownum =1
select pac_period_id from (select cpp.pac_period_id
,cpp.period_name
from cst_pac_periods cpp
where cpp.legal_entity = 102
order by cpp.pac_period_id desc)
where rownum =1
select k.pac_period_id from
select pac_period_id,rownum rn from (select cpp.pac_period_id
,cpp.period_name
from cst_pac_periods cpp
where cpp.legal_entity = 102
order by cpp.pac_period_id desc) k
where rn = 2
select pac_period_id,rownum rn from (select cpp.pac_period_id
,cpp.period_name
from cst_pac_periods cpp
where cpp.legal_entity = 102
order by cpp.pac_period_id desc)
)k
where rn = 2
select *
from (
select a.*, rank() over(order by pac_period_id) as lev
from (
select cpp.pac_period_id, cpp.period_name
from cst_pac_periods cpp
where cpp.legal_entity = 102
order by cpp.pac_period_id desc
) a
)
where lev = 2
为什么这个查询结果是升序的,是因为rank() over(order by pac_period_id)这个缘故吗
而rownum > 1 则不可以, 因为这个条件中rownum为1时就不成立了.
所以直接使用 rownum=2 也不会有结果显示, 因为 1 != 2.
在这种情况下就是利用嵌套查询来实现了!~