FIRST_VALUE (Transact-SQL)FIRST_VALUE (Transact-SQL)

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2012)simAzure SQL DatabasesimAzure SQL Data Warehouse simParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Retorna o primeiro valor em um conjunto ordenado de valores no SQL Server 2017SQL Server 2017.Returns the first value in an ordered set of values in SQL Server 2017SQL Server 2017.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

scalar_expressionscalar_expression
É o valor a ser retornado.Is the value to be returned. scalar_expression pode ser uma coluna, subconsulta ou outra expressão arbitrária que resulta em um único valor.scalar_expression can be a column, subquery, or other arbitrary expression that results in a single value. Outras funções analíticas não são permitidas.Other analytic functions are not permitted.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada.partition_by_clause divides the result set produced by the FROM clause into partitions to which the function is applied. Se não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo.If not specified, the function treats all rows of the query result set as a single group. order_by_clause determina a ordem lógica na qual a operação é executada.order_by_clause determines the logical order in which the operation is performed. order_by_clause é obrigatório.order_by_clause is required. rows_range_clause limita ainda mais as linhas dentro da partição com a especificação de pontos iniciais e finais.rows_range_clause further limits the rows within the partition by specifying start and end points. Para obter mais informações, consulte Cláusula OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).

Tipos de retornoReturn Types

É o mesmo tipo que scalar_expression.Is the same type as scalar_expression.

Comentários geraisGeneral Remarks

FIRST_VALUE é não determinística.FIRST_VALUE is nondeterministic. Para obter mais informações, veja Funções determinísticas e não determinísticas.For more information, see Deterministic and Nondeterministic Functions.

ExemplosExamples

A.A. Usando FIRST_VALUE sobre um conjunto de resultados da consultaUsing FIRST_VALUE over a query result set

O exemplo seguinte usa FIRST_VALUE para retornar o nome do produto que é o menos caro em uma determinada categoria de produto.The following example uses FIRST_VALUE to return the name of the product that is the least expensive in a given product category.

USE AdventureWorks2012;  
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.Here is the result set.


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.B. Usando FIRST_VALUE sobre partiçõesUsing FIRST_VALUE over partitions

O exemplo a seguir usa FIRST_VALUE para retornar o funcionário com o menor número de horas de férias comparado a outros funcionários com o mesmo cargo.The following example uses FIRST_VALUE to return the employee with the fewest number of vacation hours compared to other employees with the same job title. A cláusula PARTITION BY particiona os funcionários por cargo e a função FIRST_VALUE é aplicada independentemente a cada partição.The PARTITION BY clause partitions the employees by job title and the FIRST_VALUE function is applied to each partition independently. 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.The ORDER BY clause specified in the OVER clause determines the logical order in which the FIRST_VALUE function is applied to the rows in each partition. A cláusula ROWS UNBOUNDED PRECEDING especifica que o ponto de partida da janela é a primeira linha de cada partição.The ROWS UNBOUNDED PRECEDING clause specifies the starting point of the window is the first row of each partition.

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;  

Este é um conjunto de resultados parcial.Here is a partial result set.


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  

Consulte TambémSee Also

Cláusula OVER (Transact-SQL)OVER Clause (Transact-SQL)