oracle lag与lead分析函数简介
来源:互联网 发布:淘宝售后是什么意思 编辑:程序博客网 时间:2024/06/05 03:05
lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数我们可以取到当前行列的偏移N行列的值 lag可以看着是正的向上的偏移 lead可以认为负的向下的偏移 具体我们来看几个例子:
我们先看下scott的emp表的两列数据:
select deptno, sal from scott.emp order by deptno
DEPTNO SAL
10 2450.00
10 5000.00
10 1300.00
20 2975.00
20 3000.00
20 1100.00
20 800.00
20 3000.00
30 1250.00
30 1500.00
30 1600.00
30 950.00
30 2850.00
30 1250.00
ok那现在比方我有个这样的需求(我们只看sal列)我想问你2450的上一个值是多少?回答是没有 那5000的上一个值是多少?是:2450 1300的上一个值是多少呢?是:5000 Ok以此类推我想得到当前值的上一个值
就像:2450 xxx(xxx代表空)--这个值是前一列的上一个值
5000.00 2450
1300.00 5000
2975.00 1300
3000.00 2975
1100.00 3000
... ...
1250.00 2850
OK就这样的需求 那我们现在用SQL应该如何写呢?是的你猜对了就是用lag分析函数:
select deptno, sal a, lag(sal, 1, sal) b over(order by deptno)
from scott.emp
DEPTNO A B
10 2450.002450 --ps:这里的之所以是2450是因为lag(sal, 1, sal)我让它给了他本身的值
10 5000.002450
10 1300.005000
20 2975.001300
20 3000.002975
20 1100.003000
20 800.001100
20 3000.00800
30 1250.003000
30 1500.001250
30 1600.001500
30 950.001600
30 2850.00950
30 1250.002850
是的就这么简单你看出A列与B列之间有何联系了吧 相对A列B列是她的上一个值
关于lead她就刚好与lag相反了
select deptno, sal a, lead(sal, 1, sal) over(order by deptno) b
from scott.emp
DEPTNO A B
10 2450.005000
10 5000.001300
10 1300.002975
20 2975.003000
20 3000.001100
20 1100.00800
20 800.003000
20 3000.001250
30 1250.001500
30 1500.001600
30 1600.00950
30 950.002850
30 2850.001250
30 1250.001250
相对A列B列是她的下一个值
另外那个偏移值1是可以随便取的如果是2那就是偏移两个值了
select deptno, sal a, lag(sal, 2,null) over(order by deptno) b
from scott.emp
DEPTNO A B
10 2450.00 --注意这里是null空了
10 5000.00
10 1300.002450 --A列1300的上两个值是多少?2450是吧
20 2975.005000
20 3000.001300
20 1100.002975
20 800.003000
20 3000.001100
30 1250.00800
30 1500.003000
30 1600.001250
30 950.001500
30 2850.001600
30 1250.00950
OK 那其实lag,lead还可以加上分组偏移的
select deptno,
sal a,
lag(sal, 1, null) over(partition by deptno order by deptno) b
from scott.emp
DEPTNO A B
10 2450.00
10 5000.002450
10 1300.005000
20 2975.00
20 3000.002975
20 1100.003000
20 800.001100
20 3000.00800
30 1250.00
30 1500.001250
30 1600.001500
30 950.001600
30 2850.00950
30 1250.002850
注意deptno不同的分组间的临界值你看明白了吧
转自:http://blog.chinaunix.net/uid-411974-id-121875.html
0 0
- oracle lag与lead分析函数简介
- oracle lag与lead分析函数简介
- oracle lag与lead分析函数简介
- oracle lag与lead分析函数简介
- oracle lag与lead分析函数简介
- 【转】oracle lag与lead分析函数简介
- oracle 分析函数lag 和 lead 简介
- Oracle分析函数Lead(),Lag()
- oracle 分析函数 LAG、LEAD
- ORACLE分析函数 lag lead
- Oracle lag()/lead() over()分析函数
- oracle下lag和lead分析函数
- Oracle的LAG和LEAD分析函数
- Oracle下lag和lead分析函数
- Oracle的LAG和LEAD分析函数
- oracle的LAG和LEAD分析函数
- oracle下lag和lead分析函数
- oracle下lag和lead分析函数
- Kinect V2 开发专题(4)骨骼/深度/红外/摄像头数据获取
- NYOJ 40 公约数和公倍数
- Eclipse里面加载Java和Android源代码方法
- linux 压缩
- DataBase Tablespace
- oracle lag与lead分析函数简介
- 谁有BonePro插件发给我
- Kinect V2 开发专题(5)坐标映射/人脸识别/语音 - (未完成)
- live555笔记(一)
- 富文本(属性字符串)
- 再谈高级面向对象编程之接口
- linux系统下ubuntu重启apache服务命令
- ACM新秀赛模拟——统计出其中英文字母、数字、空格和其他字符的个数
- 【Java.ThirdParty】序列化框架性能对比(kryo、hessian、java、protostuff)