在Oracle中,LAG函數用于獲取分組內的前一行數據
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
:將結果集按照部門ID進行分區。ORDER BY t1.salary
:在每個分區內,根據工資對行進行排序。LAG(t1.salary) OVER (...)
:在每個分區內,獲取當前行的前一行的工資值。注意:在第一行數據中,沒有前一行數據,因此LAG函數將返回NULL。