Compartir a través de


FIRST_VALUE (Transact-SQL)

Devuelve el primer valor de un conjunto ordenado de valores de SQL Server 2012.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

FIRST_VALUE ( [scalar_expression ] ) 
    OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

Argumentos

  • scalar_expression
    Es el valor que se va 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.

  • 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 especificando puntos de inicio y finales. Para obtener más información, vea OVER (cláusula de Transact-SQL).

Tipos de valor devuelto

Es el mismo tipo que scalar_expression

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 AdventureWorks2012;
GO
SELECT Name, ListPrice, 
       FIRST_VALUE(Name) OVER (ORDER BY ListPrice ASC) AS LeastExpensive 
FROM Production.Product
WHERE ProductSubcategoryID = 37;

El conjunto de resultados es el siguiente.

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 independientemente. 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 AdventureWorks2012; 
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;

A continuación se muestra un conjunto de resultados parcial.

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

Vea también

Referencia

OVER (cláusula de Transact-SQL)