摘要:在本教程中,您將學習如何使用 SQL LAST_VALUE() 函式返回有序值集中的最後一個值。
SQL LAST_VALUE() 函式概述 #
LAST_VALUE() 是一個視窗函式,它返回有序值集中的最後一個值。
以下是 LAST_VALUE() 函式的基本語法:
LAST_VALUE(expression) OVER (
partition_clause
order_clause
frame_clause
)Code language: SQL (Structured Query Language) (sql)在此語法中:
expression(表示式) #
函式的返回值可以是一個列或一個結果為單個值的表示式。
OVER 子句由三個部分組成:partition_clause、order_clause 和 frame_clause。
partition_clause(分割槽子句) #
partition_clause 子句的語法如下:
PARTITION BY expr1, expr2, ...Code language: SQL (Structured Query Language) (sql)PARTITION BY 子句將結果集的行劃分為分割槽,LAST_VALUE() 函式將應用於這些分割槽。因為 PARTITION BY 子句是可選的,如果省略它,函式會將整個結果集視為單個分割槽。
order_clause(排序子句) #
order_clause 子句指定了 LAST_VALUE() 函式所應用的分割槽內行的順序。ORDER BY 子句的語法如下:
ORDER BY expr1 [ASC | DESC], expr2, ...Code language: SQL (Structured Query Language) (sql)frame_clause(框架子句) #
frame_clause 定義了正在評估的分割槽的子集(或框架)。有關框架子句的詳細資訊,請檢視視窗函式教程。
SQL LAST_VALUE() 函式示例 #
我們將使用示例資料庫中的 employees 和 departments 表進行演示。

在結果集上使用 SQL LAST_VALUE() 函式的示例 #
以下語句查詢公司中薪水最高的員工:
SELECT
first_name,
last_name,
salary,
LAST_VALUE (first_name) OVER (
ORDER BY salary
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_salary
FROM
employees;
Code language: SQL (Structured Query Language) (sql)這是部分輸出:
在此示例中,ORDER BY 子句按薪水對員工進行排序,而 LAST_VALUE() 選擇了薪水最高的員工的名字。
框架子句如下:
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
Code language: SQL (Structured Query Language) (sql)它意味著框架從結果集的第一行 (UNBOUNDED PRECEDING) 開始,到最後一行 (UNBOUNDED FOLLOWING) 結束。
在分割槽上使用 SQL LAST_VALUE() 的示例 #
以下語句查詢每個部門中薪水最高的員工。
SELECT
first_name,
last_name,
department_name,
salary,
LAST_VALUE (CONCAT(first_name,' ',last_name)) OVER (
PARTITION BY department_name
ORDER BY salary
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_salary
FROM
employees e
INNER JOIN departments d
ON d.department_id = e.department_id;
Code language: SQL (Structured Query Language) (sql)下圖顯示了查詢的輸出:

讓我們更詳細地分析一下這個查詢:
- 首先,
PARTITION BY子句按部門對員工進行了劃分。 - 然後,
ORDER BY子句按薪水升序對每個部門中的員工進行排序。 - 最後,
LAST_VALUE()應用於每個分割槽中已排序的行。因為框架從每個分割槽的第一行開始,到最後一行結束,所以LAST_VALUE()選擇了薪水最高的員工。
在本教程中,您學習瞭如何使用 SQL LAST_VALUE() 函式來獲取有序值集中的最後一個值。
資料庫 #
- PostgreSQL LAST_VALUE 函式
- Oracle LAST_VALUE 函式
- SQL Server LAST_VALUE 函式
- SQLite LAST_VALUE 函式
- MySQL LAST_VALUE 函式