SQL Server Last_value()函数

在本教程中,将学习如何使用SQL Server LAST_VALUE()函数获取结果集的有序分区中的最后一个值。

SQL Server LAST_VALUE()函数简介

LAST_VALUE()函数是一个Window函数,它返回结果集的有序分区中的最后一个值。

以下是LAST_VALUE()函数的语法:

LAST_VALUE ( scalar_expression )  
OVER ( 
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
    [rows_range_clause]
)

在上面语法中,

  • scalar_expression是针对结果集的有序分区中最后一行的值计算的表达式。 scalar_expression可以是列,子查询或表达式,其求值为单个值。它不能是一个Window函数。
  • PARTITION BY子句将结果集的行分发到应用了LAST_VALUE()函数的分区。 如果未指定PARTITION BY子句,则LAST_VALUE()函数会将整个结果集视为单个分区。
  • ORDER BY子句指定应用LAST_VALUE()函数的每个分区中行的逻辑顺序。
  • rows_range_clause通过定义起点和终点进一步限制分区内的行。

SQL Server LAST_VALUE()函数示例

下面将使用在FIRST_VALUE()函数教程中创建的sales.vw_category_sales_volume视图来演示LAST_VALUE()函数的工作原理。

以下查询从视图返回数据:

SELECT 
    category_name, 
    year, 
    qty
FROM 
    sales.vw_category_sales_volume
ORDER BY 
    year, 
    category_name, 
    qty;

执行上面查询语句,得到以下结果:

查询结果

1. 使用LAST_VALUE()在结果集示例
此示例使用LAST_VALUE()函数返回2016年销售量最高的类别名称:

SELECT 
    category_name,
    year,
    qty,
    LAST_VALUE(category_name) OVER(
        ORDER BY qty
         RANGE BETWEEN 
            UNBOUNDED PRECEDING AND 
            UNBOUNDED FOLLOWING
    ) highest_sales_volume
FROM 
    sales.vw_category_sales_volume
WHERE
    year = 2016;

执行上面查询语句,得到以下结果:

在这个例子中:

  • 如果未指定PARTITION BY子句,因此整个结果集被视为单个分区。
  • ORDER BY子句按数量(qty)从低到高对每个分区中的行进行排序。
  • UNBOUNDED PRECEDINGUNBOUNDED FOLLOWING子句之间的范围定义了从第一行开始到最后一行结束的分区中的帧。

2. 在分区上使用LAST_VALUE()函数示例

以下示例使用LAST_VALUE()函数返回2016年和2017年销售量最高的产品类别。

SELECT 
    category_name,
    year,
    qty,
    LAST_VALUE(category_name) OVER(
 PARTITION BY year
        ORDER BY qty
        RANGE BETWEEN 
            UNBOUNDED PRECEDING AND 
            UNBOUNDED FOLLOWING
    ) highest_sales_volume
FROM 
    sales.vw_category_sales_volume
WHERE
    year IN (2016,2017);

执行上面查询语句,得到以下结果:

在这个例子中:

  • PARTITION BY子句按年分配行分为两个分区,一个用于2016,另一个用于2017。
  • ORDER BY子句按数量(qty)从低到高对每个分区中的行进行排序。
  • UNBOUNDED PRECEDINGUNBOUNDED FOLLOWING子句之间的范围定义从第一行开始到结束于分区的最后一行的帧。
  • LAST_VALUE()函数分别应用于每个分区。 对于第一个分区,它返回Electric Bikes;对于第二个分区,它返回了Comfort Bicycles,因为这些类别是每个分区中的最后一行。

在本教程中,学习了如何使用SQL Server LAST_VALUE()函数返回结果集的有序分区中的最后一个值。


上一篇: SQL Server Window函数 下一篇:无