摘要:在本教程中,您将学习如何使用 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()
函数来获取有序值集合中的最后一个值。