FIRST_VALUE (Transact-SQL)
Se aplica a: Punto de conexión de análisis sql de Azure SQL Server de Azure SQL Database Instancia administrada el sistema de plataforma de Análisis de Azure Synapse Analytics (PDW) de Azure SQL Edge en Microsoft Fabric Warehouse en Microsoft Fabric
Devuelve el primer valor de un conjunto ordenado de valores.
Convenciones de sintaxis de Transact-SQL
Sintaxis
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Argumentos
scalar_expression
Valor que se va a devolver. scalar_expression puede ser una columna, una subconsulta u otra expresión arbitraria que dé como resultado un solo valor. No se permiten otras funciones analíticas.
[ IGNORE NULLS | RESPECT NULLS ]
Se aplica a: SQL Server (a partir de SQL Server 2022 [16.x]), Azure SQL Database, Azure SQL Managed Instance y Azure SQL Edge
IGNORE NULLS
: se omiten los valores NULL del conjunto de datos al calcular el primer valor en una partición.
RESPECT NULLS
: respeta los valores NULL del conjunto de datos al calcular el primer valor en una partición. RESPECT NULLS
es el comportamiento predeterminado si no se especifica una opción NULLS.
Para más información sobre este argumento en Azure SQL Edge, consulte Imputación de valores que faltan.
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función. Si no se especifica, la función trata todas las filas del conjunto de resultados de la consulta como un único grupo.
order_by_clause determina el orden lógico en el que se realiza la operación. order_by_clause es obligatorio.
rows_range_clause limita aún más las filas de la partición, ya que especifica puntos de inicio y final.
Para más información, vea Cláusula OVER (Transact-SQL).
Tipos de valores devueltos
El mismo tipo que scalar_expression.
Observaciones
FIRST_VALUE
sea no determinista. Para más información, vea Funciones deterministas y no deterministas.
Ejemplos
A. Usar FIRST_VALUE sobre un conjunto de resultados de consulta
En el ejemplo siguiente se usa FIRST_VALUE
para devolver el nombre del producto menos costoso de una categoría de productos determinada.
USE AdventureWorks2022;
GO
SELECT Name,
ListPrice,
FIRST_VALUE(Name) OVER (
ORDER BY ListPrice ASC
) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Este es el 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 en particiones
En el ejemplo siguiente se usa FIRST_VALUE
para devolver el empleado con el menor número de horas de vacaciones en comparación con otros empleados del mismo puesto. La cláusula PARTITION BY
divide los empleados por puesto y la función FIRST_VALUE
se aplica a cada partición de forma independiente. La cláusula ORDER BY
especificada en la cláusula OVER
determina el orden lógico en el que se aplica la función FIRST_VALUE
a las filas de cada partición. La cláusula ROWS UNBOUNDED PRECEDING
especifica que el punto inicial de la ventana es la primera fila de cada partición.
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;
Este es el 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