Sdílet prostřednictvím


FIRST_VALUE (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW) koncový bod azure SQL Edge SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabric

Vrátí první hodnotu v seřazené sadě hodnot.

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

scalar_expression

Hodnota, která se má vrátit. scalar_expression může být sloupec, poddotaz nebo jiný libovolný výraz, který vede k jedné hodnotě. Jiné analytické funkce nejsou povolené.

[ IGNOROVAT HODNOTY NULL | RESPECT NULLS ]

platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance a Azure SQL Edge

IGNORE NULLS – při výpočtu první hodnoty v oddílu v datové sadě ignorujte hodnoty null.

RESPECT NULLS – Při výpočtu první hodnoty v oddílu respektujte hodnoty null v datové sadě. RESPECT NULLS je výchozí chování, pokud není zadána možnost NULLS.

Další informace o tomto argumentu v Azure SQL Edge najdete v tématu Imputing missing values.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

partition_by_clause rozdělí sadu výsledků vytvořenou klauzulí FROM na oddíly, na které se funkce použije. Pokud není zadáno, funkce zachází se všemi řádky sady výsledků dotazu jako s jednou skupinou.

order_by_clause určuje logické pořadí, ve kterém se operace provádí. Vyžaduje se order_by_clause.

rows_range_clause dále omezuje řádky v oddílu zadáním počátečních a koncových bodů.

Další informace naleznete v tématu OVER – klauzule (Transact-SQL).

Návratové typy

Stejný typ jako scalar_expression.

Poznámky

FIRST_VALUE je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.

Příklady

A. Použití FIRST_VALUE v sadě výsledků dotazu

Následující příklad používá FIRST_VALUE k vrácení názvu produktu, který je nejlevnější v dané kategorii produktu.

USE AdventureWorks2022;
GO

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

Tady je sada výsledků.

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. Použití FIRST_VALUE přes oddíly

Následující příklad používá FIRST_VALUE k vrácení zaměstnance s nejmenším počtem hodin dovolené ve srovnání s ostatními zaměstnanci se stejnou pracovní pozici. Klauzule PARTITION BY rozděluje zaměstnance podle pracovní pozice a funkce FIRST_VALUE se použije na každý oddíl nezávisle. Klauzule ORDER BY zadaná v klauzuli OVER určuje logické pořadí, ve kterém se funkce FIRST_VALUE použije na řádky v každém oddílu. Klauzule ROWS UNBOUNDED PRECEDING určuje výchozí bod okna je první řádek každého oddílu.

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;

Tady je sada výsledků.

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