Megosztás a következőn keresztül:


FIRST_VALUE (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW) Azure SQL Edge SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Egy rendezett értékkészlet első értékét adja vissza.

Transact-SQL szintaxis konvenciói

Szintaxis

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

Érvek

scalar_expression

A visszaadandó érték. scalar_expression lehet egy oszlop, alquery vagy más tetszőleges kifejezés, amely egyetlen értéket eredményez. Más elemzési függvények nem engedélyezettek.

[ NULL ÉRTÉKEK FIGYELMEN KÍVÜL HAGYÁSA | RESPECT NULLS ]

A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány és Azure SQL Edge

IGNORE NULLS – Figyelmen kívül hagyja az adathalmaz null értékeit, amikor az első értéket egy partíción számítja ki.

RESPECT NULLS – Az adathalmaz null értékeinek tiszteletben tartása az első érték partíción történő kiszámításakor. RESPECT NULLS az alapértelmezett viselkedés, ha nincs megadva NULL ÉRTÉKŰ beállítás.

Az Azure SQL Edge argumentumával kapcsolatos további információkért lásd hiányzó értékekimputálása című témakört.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

A partition_by_clause a FROM záradék által létrehozott eredményhalmazt partíciókra osztja, amelyekre a függvényt alkalmazza. Ha nincs megadva, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli.

A order_by_clause határozza meg a művelet végrehajtásának logikai sorrendjét. A order_by_clause szükséges.

A rows_range_clause a kezdő- és végpontok megadásával tovább korlátozza a partíció sorait.

További információ: OVER záradék (Transact-SQL).

Visszatérési típusok

Ugyanaz a típus, mint scalar_expression.

Megjegyzések

FIRST_VALUE nemdeterminista. További információ: Determinisztikus és nem determinisztikus függvények.

Példák

Egy. FIRST_VALUE használata lekérdezési eredményhalmazon

Az alábbi példa a FIRST_VALUE használatával adja vissza annak a terméknek a nevét, amely egy adott termékkategóriában a legkevésbé költséges.

USE AdventureWorks2022;
GO

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

Itt van az eredményhalmaz.

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 használata partíciókon

Az alábbi példa a FIRST_VALUE használatával adja vissza a legkevesebb szabadságidővel rendelkező alkalmazottat az azonos beosztású többi alkalmazotthoz képest. A PARTITION BY záradék feladatcím alapján particionálja az alkalmazottakat, és a FIRST_VALUE függvényt egymástól függetlenül alkalmazza a rendszer az egyes partíciókra. A ORDER BY záradékban megadott OVER záradék határozza meg a FIRST_VALUE függvény alkalmazásának logikai sorrendjét az egyes partíciók soraiban. A ROWS UNBOUNDED PRECEDING záradék meghatározza, hogy az ablak kezdőpontja az egyes partíciók első sora.

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;

Itt van az eredményhalmaz.

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