SQL Server First_value()函数

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

SQL Server FIRST_VALUE()函数简介

FIRST_VALUE()函数是一个窗口函数,它返回结果集的有序分区中的第一个值。

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

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

在上面语法中,

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

SQL Server FIRST_VALUE()函数示例

以下语句创建名为sales.vw_category_sales_volume的新视图,该视图返回按产品类别和年份销售的产品数。

CREATE VIEW 
    sales.vw_category_sales_volume 
AS
SELECT 
    category_name, 
    YEAR(order_date) year, 
    SUM(quantity) qty
FROM 
    sales.orders o
INNER JOIN sales.order_items i 
    ON i.order_id = o.order_id
INNER JOIN production.products p 
    ON p.product_id = i.product_id
INNER JOIN production.categories c 
    ON c.category_id = p.product_id
GROUP BY 
    category_name, 
    YEAR(order_date);

接下来,查询视图中的数据 -

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

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

1. FIRST_VALUE()使用结果集示例
此示例使用FIRST_VALUE()函数返回2017年销售量最低的类别名称:

SELECT 
    category_name,
    year,
    qty,
    FIRST_VALUE(category_name) OVER(
        ORDER BY qty
    ) lowest_sales_volume
FROM 
    sales.vw_category_sales_volume
WHERE
    year = 2017;

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

查询结果

在这个例子中:

  • 未指定PARTITION BY子句,因此整个结果集被视为单个分区。
  • ORDER BY子句按数量(qty)从低到高对每个分区中的行进行排序。

2. FIRST_VALUE()在分区上使用示例

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

SELECT 
    category_name,
    year,
    qty,
    FIRST_VALUE(category_name) OVER(
        `PARTITION BY` year
        ORDER BY qty
    ) lowest_sales_volume
FROM 
    sales.vw_category_sales_volume
WHERE
    year BETWEEN 2016 AND 2017;

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

在这个例子中:

  • PARTITION BY子句按年分配行分为两个分区,一个用于2016,另一个用于2017
  • ORDER BY子句按数量(qty)从低到高对每个分区中的行进行排序。
  • FIRST_VALUE()函数分别应用于每个分区。 对于第一个分区,它返回Electric Bikes,对于第二个分区,它返回了Comfort Bicycles,因为这些类别是每个分区中的第一行。

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


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