Udostępnij za pośrednictwem


FIRST_VALUE (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW) punktu końcowego analizy SQL usługi Azure SQL Edge w usłudze Microsoft FabricWarehouse w usłudze Microsoft Fabric

Zwraca pierwszą wartość w uporządkowanym zestawie wartości.

Transact-SQL konwencje składni

Składnia

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

Argumenty

scalar_expression

Wartość, która ma zostać zwrócona. scalar_expression może być kolumną, podzapytaniem lub innym dowolne wyrażeniem, które powoduje pojedynczą wartość. Inne funkcje analityczne nie są dozwolone.

[ IGNORUJ WARTOŚCI NULL | RESPECT NULLS ]

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance i Azure SQL Edge

IGNORE NULLS — ignoruj wartości null w zestawie danych podczas obliczania pierwszej wartości na partycji.

RESPECT NULLS — uwzględnianie wartości null w zestawie danych podczas obliczania pierwszej wartości na partycji. RESPECT NULLS jest zachowaniem domyślnym, jeśli nie określono opcji NULLS.

Aby uzyskać więcej informacji na temat tego argumentu w usłudze Azure SQL Edge, zobacz Przypisywanie brakujących wartości.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

partition_by_clause dzieli zestaw wyników wygenerowany przez klauzulę FROM na partycje, do których jest stosowana funkcja. Jeśli nie zostanie określony, funkcja traktuje wszystkie wiersze zestawu wyników zapytania jako pojedynczą grupę.

order_by_clause określa kolejność logiczną, w której jest wykonywana operacja. Wymagany jest order_by_clause.

rows_range_clause dodatkowo ogranicza wiersze w partycji, określając punkty początkowe i końcowe.

Aby uzyskać więcej informacji, zobacz OVER Clause (Transact-SQL).

Typy zwracane

Ten sam typ co scalar_expression.

Uwagi

FIRST_VALUE nie jest nieokreślony. Aby uzyskać więcej informacji, zobacz funkcje deterministyczne i nieokreślone.

Przykłady

A. Używanie FIRST_VALUE w zestawie wyników zapytania

W poniższym przykładzie użyto FIRST_VALUE, aby zwrócić nazwę produktu, który jest najmniej drogi w danej kategorii produktów.

USE AdventureWorks2022;
GO

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

Oto zestaw wyników.

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. Używanie FIRST_VALUE na partycjach

W poniższym przykładzie użyto FIRST_VALUE, aby zwrócić pracownika z najmniejszą liczbą godzin urlopu w porównaniu z innymi pracownikami o tym samym stanowisku. Klauzula PARTITION BY partycjonuje pracowników według stanowiska, a funkcja FIRST_VALUE jest stosowana do każdej partycji niezależnie. Klauzula ORDER BY określona w klauzuli OVER określa kolejność logiczną, w której funkcja FIRST_VALUE jest stosowana do wierszy w każdej partycji. Klauzula ROWS UNBOUNDED PRECEDING określa punkt początkowy okna jest pierwszym wierszem każdej partycji.

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;

Oto zestaw wyników.

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