FIRST_VALUE (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の Azure SQL Edge SQL 分析エンドポイント Microsoft Fabric のウェアハウス

順序付けられた値セットの最初の値を返します。

Transact-SQL 構文表記規則

構文

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

引数

scalar_expression

返される値。 scalar_expression 列、サブクエリ、またはその他の任意の式を結果が 1 つの値を指定できます。 他の分析関数は指定できません。

[ IGNORE NULLS | RESPECT NULLS ]

適用対象: SQL Server (SQL Server 2022 (16.x) 以降)、Azure SQL Database、Azure SQL Managed Instance、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 句で生成された結果セットをパーティションに分割します。このパーティションに関数が適用されます。 指定しない場合、関数ではクエリ結果セットのすべての行を 1 つのグループとして扱います。

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