17,086
社区成员
发帖
与我相关
我的任务
分享
select a.x from (select x from a order by x desc) a where a.rownum=2;
--很久以前用的方法 --反查
with temp_tab1 as
(select '1' as num1 from dual union all
select '2' as num1 from dual union all
select '3' as num1 from dual union all
select '4' as num1 from dual union all
select '5' as num1 from dual )
select max(num1) from temp_tab1 where num1 <(select max(num1) from temp_tab1)
--后来会分析函数了
with temp_tab1 as
(select '1' as num1 from dual union all
select '2' as num1 from dual union all
select '3' as num1 from dual union all
select '4' as num1 from dual union all
select '5' as num1 from dual )
select num1 from (select num1 , row_number()over(order by num1 desc) rn from temp_tab1 ) where rn = 2 ;
--如果有重复记录 就用 dense_rank 后来会分析函数了
with temp_tab1 as
(select '1' as num1 from dual union all
select '2' as num1 from dual union all
select '5' as num1 from dual union all
select '3' as num1 from dual union all
select '4' as num1 from dual union all
select '4' as num1 from dual union all
select '5' as num1 from dual )
select * from (select num1 , dense_rank()over(order by num1 desc) rn from temp_tab1 ) where rn = 2 ;
SELECT t.X FROM (SELECT X,ROW_NUMBER() OVER(ORDER BY X DESC) num FROM A) t WHERE t.num=2;
SELECT t.X FROM (SELECT X,ROW_NUMBER() OVER(ORDER BY X DESC) num FROM A) t WHERE t.num>1 AND t.num<3;
SELECT t.X FROM (SELECT X,ROW_NUMBER() OVER(ORDER BY X) num FROM A) t WHERE t.num>1 AND t.num<3;
-- 4个给定值的第二大值,就我这个思路:
with a as( select i_a as vl from dual
union all
select i_b as vl from dual
union all
select i_c as vl from dual
union all
select i_d as vl from dual ),
b as(select row_number() over(order by a.vl desc) as cno, vl from a)
select b.vl into v_return from b where b.cno=2;