首页 > Linux操作系统 > Linux操作系统 > FUN--学习分析函数之lag篇
先看一下它的标准语法:
LAG ( value_expr [, offset] [, default] )
OVER ( [query_partition_clause] order_by_clause )
LAG无须自合并就可以获取同一个表格中的多行记录。
如果不指定区距,默认值为1。
如果区距超出窗口范围,则返回可指定默认值。
如不指定默认值,则默认值为null。
我们来看一个例子吧!
SQL> SELECT ename, hiredate, sal FROM emp WHERE job = 'CLERK';
ENAME HIREDATE SAL
---------- ----------- ---------
SMITH 1980-12-17 1400.00
ADAMS 1987-5-23 1100.00
JAMES 1981-12-3 950.00
MILLER 1982-1-23 1300.00
SQL>
如果我们要在上面的4笔记录中取出每个人之前雇佣员工的工资,如何写我们的sql呢?
SQL> SELECT ename,
2 hiredate,
3 sal,
4 LAG(sal, 1, 0) OVER(ORDER BY hiredate) AS PreSal
5 FROM emp
6 WHERE job = 'CLERK';
ENAME HIREDATE SAL PRESAL
---------- ----------- --------- ----------
SMITH 1980-12-17 1400.00 0
JAMES 1981-12-3 950.00 1400
MILLER 1982-1-23 1300.00 950
ADAMS 1987-5-23 1100.00 1300
SQL>
同样如果我们想取每个人之前的两位雇佣员工的工资,如何写我们的sql呢?
SQL> SELECT ename,
2 hiredate,
3 sal,
4 LAG(sal, 1, 0) OVER(ORDER BY hiredate) AS PreSal,
5 LAG(sal, 2, 0) OVER(ORDER BY hiredate) AS PreSal2
6 FROM emp
7 WHERE job = 'CLERK';
ENAME HIREDATE SAL PRESAL PRESAL2
---------- ----------- --------- ---------- ----------
SMITH 1980-12-17 1400.00 0 0
JAMES 1981-12-3 950.00 1400 0
MILLER 1982-1-23 1300.00 950 1400
ADAMS 1987-5-23 1100.00 1300 950
SQL>
更多的我们就可想而知了哟。。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29987/viewspace-51726/ ,如需转载,请注明出处,否则将追究法律责任。