Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
 Azure SQL Edge 
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
Returnerar det första värdet i en ordnad uppsättning värden.
              
              
              Transact-SQL syntaxkonventioner
Syntax
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
    OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Argument
scalar_expression
Värdet som ska returneras. scalar_expression kan vara en kolumn, underfråga eller ett annat godtyckligt uttryck som resulterar i ett enda värde. Andra analysfunktioner är inte tillåtna.
[ IGNORERA NULLS | RESPECT NULLS ]
gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database, Azure SQL Managed Instance och Azure SQL Edge
              IGNORE NULLS – Ignorera null-värden i datauppsättningen när du beräknar det första värdet över en partition.
              RESPECT NULLS – Respektera null-värden i datamängden när du beräknar det första värdet över en partition. 
              RESPECT NULLS är standardbeteendet om inget NULLS-alternativ har angetts.
Mer information om det här argumentet i Azure SQL Edge finns i Imputing missing values.
ÖVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause delar upp resultatuppsättningen som skapas av FROM-satsen i partitioner som funktionen tillämpas på. Om det inte anges behandlar funktionen alla rader i frågeresultatuppsättningen som en enda grupp.
order_by_clause avgör i vilken logisk ordning åtgärden utförs. order_by_clause krävs.
rows_range_clause begränsar raderna i partitionen ytterligare genom att ange start- och slutpunkter.
Mer information finns i OVER-satsen (Transact-SQL).
Returtyper
Samma typ som scalar_expression.
Anmärkningar
              FIRST_VALUE är icke-terministisk. Mer information finns i deterministiska och icke-terministiska funktioner.
Exempel
A. Använda FIRST_VALUE över en frågeresultatuppsättning
I följande exempel används FIRST_VALUE för att returnera namnet på den produkt som är den billigaste i en viss produktkategori.
USE AdventureWorks2022;
GO
SELECT Name,
    ListPrice,
    FIRST_VALUE(Name) OVER (
        ORDER BY ListPrice ASC
    ) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Här är resultatuppsättningen.
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. Använda FIRST_VALUE över partitioner
I följande exempel används FIRST_VALUE för att returnera medarbetaren med minst antal semestertimmar jämfört med andra anställda med samma befattning. 
              PARTITION BY-satsen partitioner anställda efter befattning och funktionen FIRST_VALUE tillämpas separat på varje partition. Den ORDER BY-sats som anges i OVER-satsen avgör i vilken logisk ordning funktionen FIRST_VALUE tillämpas på raderna i varje partition. Satsen ROWS UNBOUNDED PRECEDING anger att startpunkten för fönstret är den första raden i varje partition.
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;
Här är resultatuppsättningen.
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