SQL LAST_VALUE

摘要:在本教學中,您將學習如何使用 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_clauseorder_clauseframe_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() 函數範例

我們將使用範例資料庫中的以下 employeesdepartments 資料表進行示範。

Employees & Departments Tables

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)

下圖顯示查詢的輸出

SQL LAST_VALUE Function Over Partition Example

讓我們更詳細地檢查查詢

  • 首先,PARTITION BY 子句依部門分割員工。
  • 然後,ORDER BY 子句依薪水升冪排序每個部門中的員工。
  • 最後,將 LAST_VALUE() 應用於每個分割區中的排序列。因為框架從每個分割區的第一列開始,到最後一列結束,所以 LAST_VALUE() 選擇了薪水最高的員工。

在本教學中,您已學習如何使用 SQL LAST_VALUE() 函數來取得排序值集合中的最後一個值。

這個教學有幫助嗎?