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