oracle下lag和lead分析函数
2015-11-19 17:01
477 查看
Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。
这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。
语法:
[sql] view plaincopy
/*语法*/
lag(exp_str,offset,defval) over()
Lead(exp_str,offset,defval) over()
--exp_str要取的列
--offset取偏移后的第几行数据
--defval:没有符合条件的默认值
1.
[sql] view plaincopy
/*基础数据*/
select t.* from test1 t;
2.
[sql] view plaincopy
/*用lag,lead分析以后的数据*/
select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name,
lead(t.name,1,0) over(order by id desc) min_v
from TEST1 t;
3.
[sql] view plaincopy
/*满足查询结果的数据*/
select i.* from(select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name,
lead(t.name,1,0) over(order by id desc) min_v
from TEST1 t) i where i.name='3aa';
这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。
语法:
[sql] view plaincopy
/*语法*/
lag(exp_str,offset,defval) over()
Lead(exp_str,offset,defval) over()
--exp_str要取的列
--offset取偏移后的第几行数据
--defval:没有符合条件的默认值
1.
[sql] view plaincopy
/*基础数据*/
select t.* from test1 t;
2.
[sql] view plaincopy
/*用lag,lead分析以后的数据*/
select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name,
lead(t.name,1,0) over(order by id desc) min_v
from TEST1 t;
3.
[sql] view plaincopy
/*满足查询结果的数据*/
select i.* from(select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name,
lead(t.name,1,0) over(order by id desc) min_v
from TEST1 t) i where i.name='3aa';
相关文章推荐
- 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解
- Oracle 数据字典查询
- oracle分析函数之ratio_to_report
- oracle 数据库空表导出问题
- oracle分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总
- ORACLE 11G新特性2
- Asp.Net通过ODBC连接Oracle数据库
- oracle upper
- Oracle 11g新特性
- 通过zabora监控oracle
- oracle sql 将字符串转换成多行
- oracle存储过程和函数的区别
- oracle数据同比的时候除数为0该怎么处理
- Oracle的4类数据字典
- Oracle 增加修改删除字段
- oracle sql 日期 case when where
- Linux创建oracle11实例
- Oracle 类型转换参考
- Centos下彻底删除oracle
- 关于Oracle将小于1的数字to_char后丢掉0的解决办法