在Oracle中,LAG函數(shù)用于獲取分組內(nèi)的前一行數(shù)據(jù)
SELECT t1.department_id,
t1.employee_id,
t1.salary,
LAG(t1.salary) OVER (PARTITION BY t1.department_id ORDER BY t1.salary) as previous_salary
FROM employees t1;
這個查詢會返回每個員工所在部門的ID、員工ID、工資以及同一部門中工資略低于該員工的前一名員工的工資。
解釋一下這個查詢:
PARTITION BY t1.department_id
:將結(jié)果集按照部門ID進行分區(qū)。ORDER BY t1.salary
:在每個分區(qū)內(nèi),根據(jù)工資對行進行排序。LAG(t1.salary) OVER (...)
:在每個分區(qū)內(nèi),獲取當前行的前一行的工資值。注意:在第一行數(shù)據(jù)中,沒有前一行數(shù)據(jù),因此LAG函數(shù)將返回NULL。