SQL LAST_VALUE 函式

摘要:在本教程中,您將學習如何使用 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_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

在結果集上使用 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)

下圖顯示了查詢的輸出:

SQL LAST_VALUE Function Over Partition Example

讓我們更詳細地分析一下這個查詢:

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

在本教程中,您學習瞭如何使用 SQL LAST_VALUE() 函式來獲取有序值集中的最後一個值。

資料庫 #

本教程是否有幫助?
© .