oracle-function-lag-lead
来源:互联网 发布:php 生成订单号 编辑:程序博客网 时间:2024/05/21 16:10
lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数我们可以取到当前行列的偏移N行列的值 lag可以看着是正的向上的偏移 lead可以认为负的向下的偏移 具体我们来看几个例子:
我们先看下scott的emp表的两列数据:
select deptno, sal from scott.emp order by deptno
DEPTNOSAL
102450.00
105000.00
101300.00
202975.00
203000.00
201100.00
20800.00
203000.00
301250.00
301500.00
301600.00
30950.00
302850.00
301250.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
DEPTNOA B
102450.00 2450 --ps:这里的之所以是2450是因为lag(sal, 1, sal)我让它给了他本身的值
105000.00 2450
101300.00 5000
202975.00 1300
203000.00 2975
201100.00 3000
20800.00 1100
203000.00 800
301250.00 3000
301500.00 1250
301600.00 1500
30950.00 1600
302850.00 950
301250.00 2850
是的就这么简单你看出A列与B列之间有何联系了吧 相对A列B列是她的上一个值
关于lead她就刚好与lag相反了
select deptno, sal a, lead(sal, 1, sal) over(order by deptno) b
from scott.emp
DEPTNOA B
102450.00 5000
105000.00 1300
101300.00 2975
202975.00 3000
203000.00 1100
201100.00 800
20800.00 3000
203000.00 1250
301250.00 1500
301500.00 1600
301600.00 950
30950.00 2850
302850.00 1250
301250.00 1250
相对A列B列是她的下一个值
另外那个偏移值1是可以随便取的如果是2那就是偏移两个值了
select deptno, sal a, lag(sal, 2,null) over(order by deptno) b
from scott.emp
DEPTNO AB
102450.00 --注意这里是null空了
105000.00
101300.00 2450 --A列1300的上两个值是多少?2450是吧
202975.00 5000
203000.00 1300
201100.00 2975
20800.00 3000
203000.00 1100
301250.00 800
301500.00 3000
301600.00 1250
30950.00 1500
302850.00 1600
301250.00 950
OK 那其实lag,lead还可以加上分组偏移的
select deptno,
sal a,
lag(sal, 1, null) over(partition by deptno order by deptno) b
from scott.emp
DEPTNOA B
102450.00
105000.00 2450
101300.00 5000
202975.00
203000.00 2975
201100.00 3000
20800.00 1100
203000.00 800
301250.00
301500.00 1250
301600.00 1500
30950.00 1600
302850.00 950
301250.00 2850
注意deptno不同的分组间的临界值你看明白了吧
PS:lag(sal)等同于lag(sal, 1, null),自行验证
0 0
- oracle-function-lag-lead
- oracle lag lead函数
- ORACLE LAG LEAD 函数
- oracle lead()和lag()
- oracle lead lag 使用实践
- 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函数
- ORACLE分析函数 lag lead
- Oracle lag()/lead() over()分析函数
- Oracle 使用LAG和LEAD函数统计
- Oracle 使用LAG和LEAD函数统计
- 数据结构例程——线索化二叉树(中序)
- Leetcode NO.266 Palindrome Permutation
- 数据结构例程——哈夫曼树
- 再写String indexOf KMP算法
- Hadoop学习笔记(一)
- oracle-function-lag-lead
- PHP的语言结构和函数的区别
- 在linux下用源代码编译MPICH 3.1.4
- IOS开发笔记-01按钮操作-13.上下左右移动 14.代码优化
- 数据挖掘工程师笔试及答案整理
- c语言之 switch 和 if 的使用比较(一)
- BZOJ 1512 [POI2006]Pro-Professor Szu Tarjan缩点+拓扑DP
- BZOJ 1514 _ [POI2006]ZAB-Frogs 单调队列+二分BFS
- BZOJ 1516 [POI2006]Mag-Warehouse 切比雪夫距离转曼哈顿距离