FIRST_VALUE (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure azure Synapse Analytics Platform System (PDW) azure SQL Edge SQL Analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Restituisce il primo valore in un set ordinato di valori.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Argomenti
scalar_expression
Valore da restituire. scalar_expression può essere una colonna, una sottoquery o un'altra espressione arbitraria che restituisce un solo valore. Altre funzioni analitiche non sono consentite.
[ IGNORE NULLS | RESPECT NULLS ]
Si applica a: SQL Server (a partire da SQL Server 2022 (16.x)), database SQL di Azure, Istanza gestita di SQL di Azure, SQL Edge di Azure
IGNORE NULLS
- Ignorare i valori Null nel set di dati durante il calcolo del primo valore su una partizione.
RESPECT NULLS
- Rispettare i valori Null nel set di dati durante il calcolo del primo valore su una partizione. RESPECT NULLS
è il comportamento predefinito se non è specificata un'opzione NULLS.
Per altre informazioni su questo argomento in SQL Edge di Azure, vedere Imputazione di valori mancanti.
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause suddivide il set di risultati generato dalla clausola FROM in partizioni alle quali viene applicata la funzione. Se non specificato, la funzione tratta tutte le righe del set di risultati della query come un unico gruppo.
order_by_clause determina l'ordine logico in cui viene eseguita l'operazione. order_by_clause è obbligatorio.
rows_range_clause limita ulteriormente le righe all'interno della partizione specificando i punti iniziali e finali.
Per altre informazioni, vedere Clausola OVER (Transact-SQL).
Tipi restituiti
Stesso tipo di scalar_expression.
Osservazioni:
FIRST_VALUE
è non deterministico. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.
Esempi
R. Usare FIRST_VALUE su un set di risultati della query
Nell'esempio seguente viene usato FIRST_VALUE
per restituire il nome del prodotto meno costoso in una categoria di prodotto specificata.
USE AdventureWorks2022;
GO
SELECT Name,
ListPrice,
FIRST_VALUE(Name) OVER (
ORDER BY ListPrice ASC
) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Il set di risultati è il seguente.
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. Usare FIRST_VALUE su partizioni
Nell'esempio seguente viene usato FIRST_VALUE
per restituire il dipendente con il minor numero di ore di ferie rispetto agli altri dipendenti con la stessa posizione. La clausola PARTITION BY
suddivide i dipendenti in base alla posizione e la funzione FIRST_VALUE
viene applicata indipendentemente a ogni partizione. La clausola ORDER BY
specificata nella clausola OVER
determina l'ordine logico in cui la funzione FIRST_VALUE
viene applicata alle righe in ogni partizione. La clausola ROWS UNBOUNDED PRECEDING
specifica il punto iniziale della finestra come prima riga di ogni partizione.
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;
Il set di risultati è il seguente.
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