FIRST_VALUE (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW) ponto de extremidade de análise SQL Edge SQL no Microsoft FabricWarehouse no Microsoft Fabric
Retorna o primeiro valor em um conjunto ordenado de valores.
Transact-SQL convenções de sintaxe
Sintaxe
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Argumentos
scalar_expression
O valor a ser devolvido. scalar_expression pode ser uma coluna, subconsulta ou outra expressão arbitrária que resulte em um único valor. Outras funções analíticas não são permitidas.
[ IGNORAR NULOS | RESPEITO NULADOS ]
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada do SQL do Azure e SQL Edge do Azure
IGNORE NULLS
- Ignore valores nulos no conjunto de dados ao calcular o primeiro valor em uma partição.
RESPECT NULLS
- Respeite valores nulos no conjunto de dados ao calcular o primeiro valor sobre uma partição.
RESPECT NULLS
é o comportamento padrão se uma opção NULLS não for especificada.
Para obter mais informações sobre esse argumento no Azure SQL Edge, consulte Imputando valores ausentes.
MAIS ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
O partition_by_clause divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada. Se não for especificada, a função trata todas as linhas do conjunto de resultados da consulta como um único grupo.
O order_by_clause determina a ordem lógica em que a operação é executada. O order_by_clause é obrigatório.
O rows_range_clause limita ainda mais as linhas dentro da partição, especificando os pontos de início e fim.
Para obter mais informações, consulte Cláusula OVER (Transact-SQL).
Tipos de devolução
O mesmo tipo que scalar_expression.
Comentários
FIRST_VALUE
é não determinista. Para obter mais informações, consulte Funções determinísticas e não determinísticas.
Exemplos
Um. Usar FIRST_VALUE sobre um conjunto de resultados de consulta
O exemplo a seguir usa FIRST_VALUE
para retornar o nome do produto que é o mais barato em uma determinada categoria de produto.
USE AdventureWorks2022;
GO
SELECT Name,
ListPrice,
FIRST_VALUE(Name) OVER (
ORDER BY ListPrice ASC
) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Aqui está o conjunto de resultados.
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. Usar FIRST_VALUE sobre partições
O exemplo a seguir usa FIRST_VALUE
para retornar o funcionário com o menor número de horas de férias em comparação com outros funcionários com o mesmo cargo. A cláusula PARTITION BY
particiona os funcionários por cargo e a função FIRST_VALUE
é aplicada a cada partição de forma independente. A cláusula ORDER BY
especificada na cláusula OVER
determina a ordem lógica na qual a função FIRST_VALUE
é aplicada às linhas em cada partição. A cláusula ROWS UNBOUNDED PRECEDING
especifica que o ponto de partida da janela é a primeira linha de cada partição.
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;
Aqui está o conjunto de resultados.
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