把下面的表名“test_plus”换成你自己的表名: select * from test_plus where rownum < 2 union all select sub2.a1-sub1.a1,sub2.a2-sub1.a2,sub2.a3-sub1.a3 from (select a1, a2, a3, row_number() over (order by 1) cnt from test_plus)sub1, (select a1, a2, a3, row_number() over (order by 1) cnt from test_plus)sub2 where sub1.cnt + 1= sub2.cnt
--开窗函数 select a-nvl(lag(a)over( order by a),0) as ta, b-nvl(lag(b)over( order by a),0) as tb, c-nvl(lag(c)over( order by c),0) as tb from ( select 1 as a,2 as b, 3 as c from dual union select 4, 1, 5 from dual ) t--执行结果 1 1 2 3 2 3 -1 2
select * from test_plus where rownum < 2
union all
select sub2.a1-sub1.a1,sub2.a2-sub1.a2,sub2.a3-sub1.a3 from
(select a1, a2, a3, row_number() over (order by 1) cnt from test_plus)sub1,
(select a1, a2, a3, row_number() over (order by 1) cnt from test_plus)sub2
where sub1.cnt + 1= sub2.cnt
select a-nvl(lag(a)over( order by a),0) as ta,
b-nvl(lag(b)over( order by a),0) as tb,
c-nvl(lag(c)over( order by c),0) as tb
from (
select 1 as a,2 as b, 3 as c from dual
union
select 4, 1, 5 from dual
) t--执行结果
1 1 2 3
2 3 -1 2