FIRST_VALUE (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric 中 Microsoft Fabric倉儲中的 Azure SQL Edge SQL 分析端點Azure Synapse AnalyticsPlatform System (PDW)

傳回已排序值集中的第一個值。

Transact-SQL 語法慣例

Syntax

FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
    OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

scalar_expression

要傳回的值。 scalar_expression 可以是資料行、子查詢,或其他結果為單一值的任意運算式。 不允許使用其他分析函數。

[ 忽略 Null | 尊重 Null ]

適用於:SQL Server (從 SQL Server 2022 (16.x)) 開始、Azure SQL Database、Azure SQL 受控執行個體、Azure SQL Edge

IGNORE NULLS - 在計算分割區上的第一個值時,忽略數據集中的 Null 值。

RESPECT NULLS - 在計算分割區上的第一個值時,尊重數據集中的 Null 值。 RESPECT NULLS 如果未指定 NULLS 選項,則為預設行為。

如需 Azure SQL Edge 中這個自變數的詳細資訊,請參閱 插補遺漏值

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

partition_by_clause 會將 FROM 子句產生的結果集分割成函式所要套用的分割區。 如未指定,此函數會將查詢結果集的所有資料列視為單一群組。

order_by_clause 決定執行作業的邏輯順序。 order_by_clause 為必要項目。

rows_range_clause 會指定起始點及結束點,以進一步限制分割區中的資料列數。

如需詳細資訊,請參閱 OVER 子句 (Transact-SQL)

傳回類型

scalar_expression 相同的類型。

備註

FIRST_VALUE 不具決定性。 如需詳細資訊,請參閱決定性與非決定性函數

範例

A. 針對查詢結果集使用 FIRST_VALUE

下列範例使用 FIRST_VALUE 傳回給定產品類別目錄中最便宜產品的名稱。

USE AdventureWorks2022;
GO

SELECT Name,
    ListPrice,
    FIRST_VALUE(Name) OVER (
        ORDER BY ListPrice ASC
    ) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;

以下為結果集。

Name                    ListPrice             LeastExpensive
----------------------- --------------------- --------------------
Patch Kit/8 Patches     2.29                  Patch Kit/8 Patches
Road Tire Tube          3.99                  Patch Kit/8 Patches
Touring Tire Tube       4.99                  Patch Kit/8 Patches
Mountain Tire Tube      4.99                  Patch Kit/8 Patches
LL Road Tire            21.49                 Patch Kit/8 Patches
ML Road Tire            24.99                 Patch Kit/8 Patches
LL Mountain Tire        24.99                 Patch Kit/8 Patches
Touring Tire            28.99                 Patch Kit/8 Patches
ML Mountain Tire        29.99                 Patch Kit/8 Patches
HL Road Tire            32.60                 Patch Kit/8 Patches
HL Mountain Tire        35.00                 Patch Kit/8 Patches

B. 針對分割區使用 FIRST_VALUE

下列範例使用 FIRST_VALUE 傳回相同職稱的員工中,休假時數最少的員工。 PARTITION BY 子句會依職稱分割員工,而 FIRST_VALUE 函數則會個別套用至每個分割區。 OVER 子句中指定的 ORDER BY 子句,可決定每個分割區中的資料列套用 FIRST_VALUE 函數的邏輯順序。 ROWS UNBOUNDED PRECEDING 子句會將視窗起點指定為每個分割區的第一個資料列。

USE AdventureWorks2022;
GO

SELECT JobTitle,
    LastName,
    VacationHours,
    FIRST_VALUE(LastName) OVER (
        PARTITION BY JobTitle ORDER BY VacationHours ASC ROWS UNBOUNDED PRECEDING
    ) AS FewestVacationHours
FROM HumanResources.Employee AS e
INNER JOIN Person.Person AS p
    ON e.BusinessEntityID = p.BusinessEntityID
ORDER BY JobTitle;

以下為結果集。

JobTitle                            LastName                  VacationHours FewestVacationHours
----------------------------------- ------------------------- ------------- -------------------
Accountant                          Moreland                  58            Moreland
Accountant                          Seamans                   59            Moreland
Accounts Manager                    Liu                       57            Liu
Accounts Payable Specialist         Tomic                     63            Tomic
Accounts Payable Specialist         Sheperdigian              64            Tomic
Accounts Receivable Specialist      Poe                       60            Poe
Accounts Receivable Specialist      Spoon                     61            Poe
Accounts Receivable Specialist      Walton                    62            Poe