oracle中想取对应列前几行或者后几行的数据时可以使用lag和lead分析函数
lag:是滞后的意思,表示本行数据是要查询的数据后面,即查询之前行的记录。
lead:是领队的意思,表示本行数据是要查的数据前面,即查询之后的记录。
语法如下
lag(exp_str,offset,defval) over(order by col_list) Lead(exp_str,offset,defval) over(order by col_list) -- exp_str:表示列名-- offset :表示移动行数,默认为1-- defval :当没有满足条件的数据时,的默认值-- 其中over中的 order by是必填参数
示例:
--第一列,empno往前2行的值,如果没有就显示0--第二列,empno的值--第三列,empno往后2行的值,如果没有就显示0SELECT lag(empno, 2, 0) over(ORDER BY empno) empno_lag, empno, lead(empno, 2, 0) over(ORDER BY empno) empno_lead FROM emp
结果: