八月 27, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的LAST_VALUE()
函数,获取结果集有序分区中的最后一个值。
目录
PostgreSQL LAST_VALUE()
函数介绍
LAST_VALUE()
函数返回结果集有序分区中的最后一个值。
LAST_VALUE()
函数的语法如下:
LAST_VALUE ( expression )
OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
在这个语法中:
expression
expression
可以是根据结果集有序分区中最后一行的值计算的表达式、列或子查询。
expression
必须返回单个值。而且它不能是一个窗口函数。
PARTITION BY 子句
PARTITION BY
子句将结果集的行划分为应用LAST_VALUE()
函数的分区。
如果省略PARTITION BY
子句,LAST_VALUE()
函数会将整个结果集视为单个分区。
ORDER BY 子句
ORDER BY
子句指定应用LAST_VALUE()
函数的每个分区中的行的排序顺序。
frame_clause
frame_clause
定义当前分区中应用LAST_VALUE()
函数的行子集。
PostgreSQL LAST_VALUE()
函数示例
我们将使用窗口函数教程中创建的products
表进行演示:
以下是products
表的数据内容:
1) 在结果集上使用 LAST_VALUE()
函数的示例
以下示例使用LAST_VALUE()
函数返回所有产品以及价格最高的产品:
SELECT
product_id,
product_name,
price,
LAST_VALUE(product_name)
OVER(
ORDER BY price
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_price
FROM
products;
在这个例子中:
- 我们跳过了
LAST_VALUE()
函数中的PARTITION BY
子句,因此,LAST_VALUE()
函数将整个结果集视为单个分区。 ORDER BY
子句按价格从低到高对产品进行排序。LAST_VALUE()
选取结果集中最后一行的产品名称。
2) 在分区上使用 LAST_VALUE()
函数的示例
以下示例使用LAST_VALUE()
函数返回所有产品以及每个产品组最昂贵的产品:
SELECT
product_id,
product_name,
group_id,
price,
LAST_VALUE(product_name)
OVER(
PARTITION BY group_id
ORDER BY price
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_price
FROM
products;
在这个例子中:
PARTITION BY
子句按组 ID 将行划分为由组 ID 为 1、2 和 3 指定的三个分区。ORDER BY
子句对每个产品组(或分区)中的产品从低到高进行排序。RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
子句定义了从每个分区的第一行开始到最后一行结束的框架。LAST_VALUE()
函数分别应用于每个分区,并返回每个分区中最后一行的产品名称。
在本教程中,您学习了如何使用 PostgreSQL 的LAST_VALUE()
窗口函数,返回结果集有序分区中的最后一个值。
了解更多
PostgreSQL 教程:窗口函数
PostgreSQL 文档:窗口函数