开发中经常用到当前行数据需要和临近行数据进行逻辑处理,这时跨行引用就派上了用场,注意以下结果中PREV_SAL的值:
1--LAG分析函数,延后取数,在不使用自联接的情况下同时提供对表的多行数据的访问 2SELECT hire_date, last_name, salary, 3 LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal 4 FROM employees 5 WHERE job_id = 'PU_CLERK' 6 ORDER BY hire_date; 7执行结果: 8HIRE_DATE LAST_NAME SALARY PREV_SAL 9--------- ------------------------- ---------- ---------- 1018-MAY-03 Khoo 3100 0 1124-JUL-05 Tobias 2800 3100 1224-DEC-05 Baida 2900 2800 1315-NOV-06 Himuro 2600 2900 1410-AUG-07 Colmenares 2500 2600 15 16--LEAD分析函数,向前取数 17SELECT hire_date, last_name, 18 LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS "NextHired" 19 FROM employees 20 WHERE department_id = 30 21 ORDER BY hire_date; 22执行结果: 23HIRE_DATE LAST_NAME Next Hired 24--------- ------------------------- ---------- 2507-DEC-02 Raphaely 18-MAY-03 2618-MAY-03 Khoo 24-JUL-05 2724-JUL-05 Tobias 24-DEC-05 2824-DEC-05 Baida 15-NOV-06 2915-NOV-06 Himuro 10-AUG-07 3010-AUG-07 Colmenares
当然,可以通过自连接的方式,使用rownum进行关联实现此功能。