有一列数据,怎么样让下一行减去上一行,

时间:2021-09-09 15:04:59
有一列数据,怎么样让下一行减去上一行,如:

col
9
20
26
39
59
71
99

下一行减去上一行结果为
col
11
6
13
20
12
28

10 个解决方案

#1


使用开窗口的Oracle分析函数。


引用楼主 luosjz 的帖子:
有一列数据,怎么样让下一行减去上一行,如: 

col 

20 
26 
39 
59 
71 
99 

下一行减去上一行结果为 
col 
11 

13 
20 
12 
28

#2


首先你的表要建个序号吧?否则的话就要按照rownum处理了。

select b.col-a.col
(select rownum,col from table) a,
 (select rownum,col from table) b
where a.rownum+1=b.rownum;

#3


col -lead(col,1,0) over(order by rownum)

#4


学习

#5


呵呵,努力學習 

#6


LEAD分析函数

#7



CREATE TABLE T(A NUMBER);
INSERT INTO T VALUES(9); 
INSERT INTO T VALUES(20); 
INSERT INTO T VALUES(26); 
INSERT INTO T VALUES(39); 
INSERT INTO T VALUES(59); 
INSERT INTO T VALUES(71); 
INSERT INTO T VALUES(99);
SELECT A-LAG(A,1,0) OVER(ORDER BY ROWNUM) COL FROM T;
-- 运行结果  
  COL
1 9
2 11
3 6
4 13
5 20
6 12
7 28

#8



如果第一行去掉的话,则可以改下sql如下:
SELECT COL
  FROM (SELECT A - LAG(A, 1, 0) OVER(ORDER BY ROWNUM) COL, ROWNUM RN FROM T)
 WHERE RN > 1;
--运行结果
    COL
1   11
2   6
3   13
4   20
5   12
6   28

#9


lag函数吗,8楼的就可以。

#10


引用 9 楼 linzhangs 的回复:
lag函数吗,8楼的就可以。

lag 是取前N行数据
LEAD是取后N行数据

#1


使用开窗口的Oracle分析函数。


引用楼主 luosjz 的帖子:
有一列数据,怎么样让下一行减去上一行,如: 

col 

20 
26 
39 
59 
71 
99 

下一行减去上一行结果为 
col 
11 

13 
20 
12 
28

#2


首先你的表要建个序号吧?否则的话就要按照rownum处理了。

select b.col-a.col
(select rownum,col from table) a,
 (select rownum,col from table) b
where a.rownum+1=b.rownum;

#3


col -lead(col,1,0) over(order by rownum)

#4


学习

#5


呵呵,努力學習 

#6


LEAD分析函数

#7



CREATE TABLE T(A NUMBER);
INSERT INTO T VALUES(9); 
INSERT INTO T VALUES(20); 
INSERT INTO T VALUES(26); 
INSERT INTO T VALUES(39); 
INSERT INTO T VALUES(59); 
INSERT INTO T VALUES(71); 
INSERT INTO T VALUES(99);
SELECT A-LAG(A,1,0) OVER(ORDER BY ROWNUM) COL FROM T;
-- 运行结果  
  COL
1 9
2 11
3 6
4 13
5 20
6 12
7 28

#8



如果第一行去掉的话,则可以改下sql如下:
SELECT COL
  FROM (SELECT A - LAG(A, 1, 0) OVER(ORDER BY ROWNUM) COL, ROWNUM RN FROM T)
 WHERE RN > 1;
--运行结果
    COL
1   11
2   6
3   13
4   20
5   12
6   28

#9


lag函数吗,8楼的就可以。

#10


引用 9 楼 linzhangs 的回复:
lag函数吗,8楼的就可以。

lag 是取前N行数据
LEAD是取后N行数据