FIRST_VALUE (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Platform System (PDW) Azure SQL Edge SQL Analytics Endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Hiermit wird der erste Wert in einer geordneten Menge von Werten zurückgegeben.
Transact-SQL-Syntaxkonventionen
Syntax
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Argumente
scalar_expression
Der zurückzugebende Wert. scalar_expression kann eine Spalte, eine Unterabfrage oder ein anderer willkürlicher Ausdruck sein, durch die sich ein einzelner Wert ergibt. Andere analytische Funktionen sind nicht zulässig.
[ IGNORE NULLS | RESPECT NULLS ]
Gilt für: SQL Server (ab SQL Server 2022 (16.x)), Azure SQL-Datenbank und Azure SQL Managed Instance, Azure SQL Edge
IGNORE NULLS
– Ignorieren Sie NULL-Werte im Dataset, wenn Sie den ersten Wert über eine Partition berechnen.
RESPECT NULLS
- Achten Sie beim Berechnen des ersten Werts über eine Partition auf NULL-Werte im Dataset. RESPECT NULLS
ist das Standardverhalten, wenn keine NULLS-Option angegeben ist.
Weitere Informationen zu diesem Argument in Azure SQL Edge finden Sie unter Imputing fehlender Werte.
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause unterteilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die Funktion angewendet wird. Wird dies nicht angegeben, verarbeitet die Funktion alle Zeilen des Abfrageresultsets als einzelne Gruppe.
order_by_clause bestimmt die logische Reihenfolge, in der der Vorgang ausgeführt wird. order_by_clause ist erforderlich.
rows_range_clause schränkt die Zeilen innerhalb der Partition weiter ein, indem Ausgangs- und Endpunkte angegeben werden.
Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).
Rückgabetypen
Entspricht dem Typ von scalar_expression.
Bemerkungen
FIRST_VALUE
ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministische und nicht deterministische Funktionen.
Beispiele
A. Verwenden von FIRST_VALUE für ein Abfrageresultset
Im folgenden Beispiel wird der Name des günstigsten Produkts in einer bestimmten Produktkategorie mithilfe von FIRST_VALUE
zurückgegeben.
USE AdventureWorks2022;
GO
SELECT Name,
ListPrice,
FIRST_VALUE(Name) OVER (
ORDER BY ListPrice ASC
) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Hier sehen Sie das Ergebnis.
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. Verwenden von FIRST_VALUE für mehrere Partitionen
Im folgenden Beispiel werden die Mitarbeiter mit der geringsten Anzahl von Urlaubsstunden im Vergleich zu anderen Angestellten mit der gleichen Berufsbezeichnung mithilfe von FIRST_VALUE
zurückgegeben. Die PARTITION BY
-Klausel partitioniert die Mitarbeiter nach der Berufsbezeichnung, und die FIRST_VALUE
-Funktion wird auf jede Partition separat angewendet. Die in der ORDER BY
-Klausel angegebene OVER
-Klausel bestimmt die logische Reihenfolge, in der die FIRST_VALUE
-Funktion auf die Zeilen in jeder Partition angewendet wird. Die ROWS UNBOUNDED PRECEDING
-Klausel gibt den Ausgangspunkt des Fensters als erste Zeile jeder Partition an.
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;
Hier sehen Sie das Ergebnis.
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