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

luosjz 2008-11-12 02:59:28
有一列数据,怎么样让下一行减去上一行,如:

col
9
20
26
39
59
71
99

下一行减去上一行结果为
col
11
6
13
20
12
28
...全文
2880 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
icss_zhen 2008-11-13
  • 打赏
  • 举报
回复

如果第一行去掉的话,则可以改下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
icss_zhen 2008-11-13
  • 打赏
  • 举报
回复

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
cosio 2008-11-13
  • 打赏
  • 举报
回复
LEAD分析函数
chentony 2008-11-13
  • 打赏
  • 举报
回复
呵呵,努力學習 
panyu1979 2008-11-13
  • 打赏
  • 举报
回复
学习
hebo2005 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 linzhangs 的回复:]
lag函数吗,8楼的就可以。
[/Quote]
lag 是取前N行数据
LEAD是取后N行数据
范佩西_11 2008-11-13
  • 打赏
  • 举报
回复
lag函数吗,8楼的就可以。
hebo2005 2008-11-12
  • 打赏
  • 举报
回复
col -lead(col,1,0) over(order by rownum)
kinglht 2008-11-12
  • 打赏
  • 举报
回复
首先你的表要建个序号吧?否则的话就要按照rownum处理了。

select b.col-a.col
(select rownum,col from table) a,
(select rownum,col from table) b
where a.rownum+1=b.rownum;
BlueskyWide 2008-11-12
  • 打赏
  • 举报
回复
使用开窗口的Oracle分析函数。


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

col
9
20
26
39
59
71
99

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

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧