Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
koncový bod azure SQL Edge
SQL Analytics ve službě Microsoft Fabric
Warehouse v Microsoft Fabric
Vrátí první hodnotu v seřazené sadě hodnot.
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
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é.
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.
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).
Stejný typ jako scalar_expression.
FIRST_VALUE
je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.
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
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