LAST_VALUE()
是一個(gè) SQL 窗口函數(shù),用于返回指定窗口中的最后一個(gè)值
LAST_VALUE(expression) OVER (
[PARTITION BY partition_expression1, partition_expression2, ...]
ORDER BY order_expression1, order_expression2, ...
[ROWS/RANGE frame_specification]
)
expression
:要計(jì)算最后一個(gè)值的列或表達(dá)式。PARTITION BY
(可選):將結(jié)果集劃分為多個(gè)分區(qū),每個(gè)分區(qū)都會(huì)應(yīng)用 LAST_VALUE()
函數(shù)。如果省略此子句,則整個(gè)結(jié)果集被視為一個(gè)分區(qū)。ORDER BY
:確定在窗口中的行順序,這對(duì)于確定“最后一個(gè)值”至關(guān)重要。ROWS/RANGE
(可選):定義窗口的范圍。默認(rèn)情況下,窗口范圍包括從當(dāng)前行到窗口末尾的所有行。你可以使用 ROWS
或 RANGE
子句自定義窗口范圍。以下是一個(gè)使用 LAST_VALUE()
函數(shù)的示例:
SELECT
employee_id,
department_id,
salary,
LAST_VALUE(salary) OVER (
PARTITION BY department_id
ORDER BY employee_id
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) as last_salary_in_department
FROM employees;
在這個(gè)示例中,我們查詢員工表,并使用 LAST_VALUE()
函數(shù)獲取每個(gè)部門的最后一個(gè)員工的薪水。我們按照 department_id
對(duì)結(jié)果集進(jìn)行分區(qū),并按照 employee_id
對(duì)每個(gè)分區(qū)內(nèi)的行進(jìn)行排序。我們還指定了窗口范圍,使其包括從當(dāng)前行到窗口末尾的所有行。