Freigeben über


FIRST_VALUE (Transact-SQL)

Gibt den ersten Wert in einer geordneten Menge von Werten in SQL Server 2012 zurück.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

FIRST_VALUE ( [scalar_expression ] ) 
    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, die einen einzelnen Wert ausgeben. Andere analytische Funktionen sind nicht zulässig.

  • OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
    partition_by_clause teilt 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 die Operation ausgeführt wird. Der 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

Der gleiche Typ wie scalar_expression.

Beispiele

A.Verwenden von FIRST_VALUE für ein Abfrageresultset

Im folgenden Beispiel wird der Namen des günstigsten Produkts in einer bestimmten Produktkategorie mithilfe von FIRST_VALUE zurückgegeben.

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

Dies ist das Resultset.

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 über Partitionen

Im folgende Beispiel werden die Mitarbeiter mit der wenigsten 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 Berufsbezeichnung, und die FIRST_VALUE-Funktion wird unabhängig auf jede Partition angewendet. Die in der OVER-Klausel angegebene ORDER BY-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 AdventureWorks2012; 
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;

Dies ist ein Auszug aus dem Resultset.

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

Siehe auch

Verweis

OVER-Klausel (Transact-SQL)