Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。 代码如下:CREATE TABLE salaryByMonth ( employeeNo varchar2(20), yearMonth varchar2(6), salary number ) ; insert into SALARYBYMONTH (EMPLOYEENO,YEARMONTH,SALARY) values (1,'200805',500); insert into SALARYBYMONTH (EMPLOYEENO,'200802',150); insert into SALARYBYMONTH (EMPLOYEENO,'200803',200); insert into SALARYBYMONTH (EMPLOYEENO,'200804',300); insert into SALARYBYMONTH (EMPLOYEENO,'200708',100); commit;
SELECT EMPLOYEENO ,YEARMONTH ,SALARY ,MIN(SALARY) KEEP(DENSE_RANK FIRST ORDER BY YEARMONTH) OVER(PARTITION BY EMPLOYEENO) FIRST_SALARY -- 基比分析 salary/first_salary ,LAG(SALARY,1,0) OVER(PARTITION BY EMPLOYEENO ORDER BY YEARMONTH) AS PREV_SAL ,12,0) OVER(PARTITION BY EMPLOYEENO ORDER BY YEARMONTH) AS PREV_12_SAL ,SUM(SALARY) OVER(PARTITION BY EMPLOYEENO,SUBSTR(YEARMONTH,4) ORDER BY YEARMONTH RANGE UNBOUNDED PRECEDING) LJ --累计值 FROM SALARYBYMONTH ORDER BY EMPLOYEENO ,YEARMONTH
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|