oracle中lag()函数和lead()函数的用法
2017-04-20 13:51
239 查看
lag和lead函数可以在同一次查询中取出同一字段的前N行数据(lag)和后N行数据(lead)。这种字段可以使用对相同表的表连接来实现,不过使用lag和lead函数具有更高的效率。
语法:
LAG(EXP_STR,OFFSET,DEFVAL)OVER()
LEAD(EXP_STR,OFFSET,DEFVAL)OVER()
EXP_STR:要取的列
OFFSET: 取偏移后的第几行数据
DEFVAL:没有符合条件的默认值
例如:
脚本一:
--使用相同的表连接来实现
select a.c_month,a.c_soto, a.kpi_value, a1.kpi_value kpi_value_s --上月
from dm_custbd_index_month a
left join dm_custbd_index_month a1
on a1.index_id = 'CUSIND_FUL001'
and a.c_soto = a1.c_soto
and a.c_month = a1.c_month + 1
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
-----------
脚本二:
--使用lag函数来实现
select a.c_month,a.c_soto,a.kpi_value,lag(a.kpi_value,1)over(order by a.c_month) --上月
from dm_custbd_index_month a
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
这两个脚本的查询结果是一样的,都是查上个月的指标值。相对来说脚本二代码简单而且执行效率更高。 结果:
lead()函数求后N行数据,同理:
select a.c_month,a.c_soto, a.kpi_value, a1.kpi_value kpi_value_x --下月
from dm_custbd_index_month a
left join dm_custbd_index_month a1
on a1.index_id = 'CUSIND_FUL001'
and a.c_soto = a1.c_soto
and a.c_month = a1.c_month- 1
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
select a.c_month,a.c_soto,a.kpi_value,lead(a.kpi_value,1)over(order by a.c_month) kpi_value_x--下月
from dm_custbd_index_month a
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
结果都是:
语法:
LAG(EXP_STR,OFFSET,DEFVAL)OVER()
LEAD(EXP_STR,OFFSET,DEFVAL)OVER()
EXP_STR:要取的列
OFFSET: 取偏移后的第几行数据
DEFVAL:没有符合条件的默认值
例如:
脚本一:
--使用相同的表连接来实现
select a.c_month,a.c_soto, a.kpi_value, a1.kpi_value kpi_value_s --上月
from dm_custbd_index_month a
left join dm_custbd_index_month a1
on a1.index_id = 'CUSIND_FUL001'
and a.c_soto = a1.c_soto
and a.c_month = a1.c_month + 1
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
-----------
脚本二:
--使用lag函数来实现
select a.c_month,a.c_soto,a.kpi_value,lag(a.kpi_value,1)over(order by a.c_month) --上月
from dm_custbd_index_month a
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
这两个脚本的查询结果是一样的,都是查上个月的指标值。相对来说脚本二代码简单而且执行效率更高。 结果:
lead()函数求后N行数据,同理:
select a.c_month,a.c_soto, a.kpi_value, a1.kpi_value kpi_value_x --下月
from dm_custbd_index_month a
left join dm_custbd_index_month a1
on a1.index_id = 'CUSIND_FUL001'
and a.c_soto = a1.c_soto
and a.c_month = a1.c_month- 1
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
select a.c_month,a.c_soto,a.kpi_value,lead(a.kpi_value,1)over(order by a.c_month) kpi_value_x--下月
from dm_custbd_index_month a
where a.index_id = 'CUSIND_FUL001'
and a.c_soto = '8800155164';
结果都是:
相关文章推荐
- oracle lag 和lead 函数的用法
- oracle中LAG()和LEAD()等分析统计函数的用法
- oracle中LAG()和LEAD()等分析统计函数的用法(统计月增长率)
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- oracle 列相减——(Oracle分析函数Lead(),Lag())
- oracle lag和lead函数
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- Oracle的LAG和LEAD分析函数
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- Oracle-分析函数之取上下行数据lag()和lead()
- oracle下lag和lead分析函数
- [Oracle]高效的SQL语句之分析函数(四)--lag()/lead()
- oracle 分析函数lag 和 lead 简介
- oracle 统计分析函数之lead和lag
- Oracle分析函数之LEAD和LAG
- [DB][ORACLE][统计函数]使用LAG和LEAD函数可以在一次查询中取出同一字段的前N行的数据和后N行的值
- Summary_Oracle lag()/lead() over()分析函数
- lag和lead函数的用法
- 【转】oracle lag与lead分析函数简介
- oracle分析函数lag/lead不能计算日期型数据?