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函數 下一篇:無