Delen via


FIRST_VALUE (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW) Azure SQL Edge SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Retourneert de eerste waarde in een geordende set waarden.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

scalar_expression

De waarde die moet worden geretourneerd. scalar_expression kan een kolom, subquery of andere willekeurige expressie zijn die resulteert in één waarde. Andere analytische functies zijn niet toegestaan.

[ NULL-WAARDEN NEGEREN | RESPECT NULLS ]

Van toepassing op: SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance en Azure SQL Edge

IGNORE NULLS: null-waarden in de gegevensset negeren bij het berekenen van de eerste waarde boven een partitie.

RESPECT NULLS: respecteer null-waarden in de gegevensset bij het berekenen van de eerste waarde boven een partitie. RESPECT NULLS is het standaardgedrag als er geen NULLS-optie is opgegeven.

Zie Ontbrekende waardeninvoeren voor meer informatie over dit argument in Azure SQL Edge.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

De partition_by_clause verdeelt de resultatenset die door de FROM-component wordt geproduceerd in partities waarop de functie wordt toegepast. Als deze niet is opgegeven, behandelt de functie alle rijen van de queryresultatenset als één groep.

De order_by_clause bepaalt de logische volgorde waarin de bewerking wordt uitgevoerd. De order_by_clause is vereist.

De rows_range_clause beperkt de rijen binnen de partitie verder door begin- en eindpunten op te geven.

Zie OVER-component (Transact-SQL) voor meer informatie.

Retourtypen

Hetzelfde type als scalar_expression.

Opmerkingen

FIRST_VALUE is niet-deterministisch. Zie Deterministische en niet-deterministische functiesvoor meer informatie.

Voorbeelden

Een. FIRST_VALUE gebruiken voor een queryresultatenset

In het volgende voorbeeld wordt FIRST_VALUE gebruikt om de naam te retourneren van het product dat de goedkoopste is in een bepaalde productcategorie.

USE AdventureWorks2022;
GO

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

Dit is de resultatenset.

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 over partities gebruiken

In het volgende voorbeeld wordt FIRST_VALUE gebruikt om de werknemer te retourneren met het minste aantal vakantieuren in vergelijking met andere werknemers met dezelfde functie. De PARTITION BY component partitioneert de werknemers op functie en de FIRST_VALUE functie wordt onafhankelijk van elke partitie toegepast. De ORDER BY component die is opgegeven in de OVER component bepaalt de logische volgorde waarin de FIRST_VALUE functie wordt toegepast op de rijen in elke partitie. De ROWS UNBOUNDED PRECEDING component geeft het beginpunt van het venster is de eerste rij van elke partitie.

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;

Dit is de resultatenset.

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