摘要:在本教學中,您將學習如何使用 SQL LAST_VALUE()
函數來傳回排序值集合中的最後一個值。
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
資料表進行示範。

A) 在結果集上使用 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
) 結束。
B) 在分割區上使用 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()
函數來取得排序值集合中的最後一個值。