Summary_Oracle lag()/lead() over()分析函数
2018-02-25 07:22
495 查看
--lead函数是按id倒序排序把下一行的age记录显示在当前行的列lag,为null显示null
with tmp as(
select '1' id ,'aa' name ,'22' age from dual union all
select '2' id ,'bb' name ,'20' age from dual union all
select '3' id ,'CC' name ,'21' age from dual
)
select a.*,
lead(age,1) over (order by id desc) lag,
a.age - lead(age,1) over (order by id desc) lag1
from tmp a;
注意:如果不使用lead()over()函数实现上图查询结果,则需要下面的SQL语句:
SELECT T1.*,T2.AGE AS LAG,T1.AGE-T2.AGE AS LAG1 FROM (
SELECT a.*,ROWNUM AS R1 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) a
) T1 LEFT JOIN (
SELECT b.*,ROWNUM-1 AS R2 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) b
) T2 ON T1.R1=T2.R2 ORDER BY T1.ID DESC;
--lag函数是按id倒序排序把上一行的age记录显示在当前行的列lag,为null显示null
with tmp as(
select '1' id ,'aa' name ,'22' age from dual union all
select '2' id ,'bb' name ,'20' age from dual union all
select '3' id ,'CC' name ,'21' age from dual
)
select a.*,
lag(age,1) over (order by id desc) lag,
a.age - lag(age,1) over (order by id desc) lag1
from tmp a;
注意:如果不使用lead()over()函数实现上图查询结果,则需要下面的SQL语句:
SELECT T1.*,T2.AGE AS LAG,T1.AGE-T2.AGE AS LAG1 FROM (
SELECT a.*,ROWNUM-1 AS R1 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) a
) T1 LEFT JOIN (
SELECT b.*,ROWNUM AS R2 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) b
) T2 ON T1.R1=T2.R2 ORDER BY T1.ID DESC;
with tmp as(
select '1' id ,'aa' name ,'22' age from dual union all
select '2' id ,'bb' name ,'20' age from dual union all
select '3' id ,'CC' name ,'21' age from dual
)
select a.*,
lead(age,1) over (order by id desc) lag,
a.age - lead(age,1) over (order by id desc) lag1
from tmp a;
注意:如果不使用lead()over()函数实现上图查询结果,则需要下面的SQL语句:
SELECT T1.*,T2.AGE AS LAG,T1.AGE-T2.AGE AS LAG1 FROM (
SELECT a.*,ROWNUM AS R1 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) a
) T1 LEFT JOIN (
SELECT b.*,ROWNUM-1 AS R2 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) b
) T2 ON T1.R1=T2.R2 ORDER BY T1.ID DESC;
--lag函数是按id倒序排序把上一行的age记录显示在当前行的列lag,为null显示null
with tmp as(
select '1' id ,'aa' name ,'22' age from dual union all
select '2' id ,'bb' name ,'20' age from dual union all
select '3' id ,'CC' name ,'21' age from dual
)
select a.*,
lag(age,1) over (order by id desc) lag,
a.age - lag(age,1) over (order by id desc) lag1
from tmp a;
注意:如果不使用lead()over()函数实现上图查询结果,则需要下面的SQL语句:
SELECT T1.*,T2.AGE AS LAG,T1.AGE-T2.AGE AS LAG1 FROM (
SELECT a.*,ROWNUM-1 AS R1 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) a
) T1 LEFT JOIN (
SELECT b.*,ROWNUM AS R2 FROM (SELECT ID,NAME,AGE FROM tmp GROUP BY ID,NAME,AGE ORDER BY ID DESC) b
) T2 ON T1.R1=T2.R2 ORDER BY T1.ID DESC;
相关文章推荐
- [Oracle]高效的SQL语句之分析函数(四)--lag()/lead()
- oracle分析函数lag/lead不能计算日期型数据?
- oracle 分析函数 LAG、LEAD
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- Oracle-分析函数之取上下行数据lag()和lead()
- oracle中LAG()和LEAD()等分析统计函数的用法(统计月增长率)
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- oracle 列相减——(Oracle分析函数Lead(),Lag())
- oracle 分析函数之 rank(), dense_rank(), lag(), lead()
- oracle分析函数系列之LAG和LEAD:取出同一字段的前N行的数据和后N行的值
- [Oracle]高效的SQL语句之分析函数(四)--lag()/lead()
- oracle中LAG()和LEAD()等分析统计函数的用法
- oracle下lag和lead分析函数
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- oracle lag与lead分析函数简介
- oracle的LAG和LEAD分析函数
- Oracle分析函数Lead(),Lag()
- Oracle分析函数总结(2) - 排序 - rank,dense_rank,row_number,first,first_value,last,last_value,lag,lead
- Oracle的LAG和LEAD分析函数
- Oracle分析函数之LEAD和LAG