Compartilhar via


FIRST_VALUE (Transact-SQL)

Retorna o primeiro valor em um conjunto ordenado de valores no SQL Server 2014.

Aplica-se a: SQL Server (do SQL Server 2012 à versão atual).

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • scalar_expression
    É o valor a ser retornado. 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.

  • 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 nas quais a função é aplicada. Se não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo. order_by_clause determina a ordem lógica na qual a operação é executada. order_by_clause é obrigatório. rows_range_clause limita adicionalmente as linhas dentro da partição com a especificação de pontos iniciais e finais. Para obter mais informações, consulte Cláusula OVER (Transact-SQL).

Tipos de retorno

É o mesmo tipo que scalar_expression.

Comentários gerais

FIRST_VALUE é não determinística. Para obter mais informações, consulte Funções determinísticas e não determinísticas.

Exemplos

A.Usando FIRST_VALUE sobre um conjunto de resultados da consulta

O exemplo seguinte usa FIRST_VALUE para retornar o nome do produto que é o menos caro em uma determinada categoria de produto.

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.

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.Usando 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 comparado a 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 independentemente a cada partição. 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 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.

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ém

Referência

Cláusula OVER (Transact-SQL)