Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возвращает первое значение из упорядоченного набора значений в SQL Server 2014.
Применимо для следующих объектов: SQL Server (начиная с SQL Server 2012 до текущей версии). |
Синтаксические обозначения в Transact-SQL
Синтаксис
FIRST_VALUE ( [scalar_expression ] )
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Аргументы
scalar_expression
Возвращаемое значение. scalar_expression может быть столбцом, вложенным запросом или другим произвольным выражением, результатом вычисления которого является единичное значение. Другие аналитические функции использовать нельзя.OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause делит результирующий набор, полученный с помощью предложения FROM, на секции, к которым применяется функция. Если этот параметр не указан, функция обрабатывает все строки результирующего набора запроса как отдельные группы. order_by_clause определяет логический порядок, в котором выполняется операция. Значение order_by_clause обязательно. rows_range_clause еще больше ограничивает строки в пределах секции, указав начальную и конечную точки. Дополнительные сведения см. в разделе Предложение OVER (Transact-SQL).
Типы возвращаемых значений
Тот же тип, что и scalar_expression.
Общие замечания
Функция FIRST_VALUE не детерминирована. Дополнительные сведения см. в разделе Детерминированные и недетерминированные функции.
Примеры
А. Использование FIRST_VALUE по результирующему набору запроса
В следующем примере FIRST_VALUE использоваться для получения имени самого дешевого продукта в заданной категории продуктов.
USE AdventureWorks2012;
GO
SELECT Name, ListPrice,
FIRST_VALUE(Name) OVER (ORDER BY ListPrice ASC) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Ниже приводится результирующий набор.
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
Б. Использование FIRST_VALUE для секций
В следующем примере FIRST_VALUE используется для получения сотрудника с наименьшим количеством часов отпуска по сравнению с другими сотрудниками, занимающими такую же должность. Предложение PARTITION BY разделяет сотрудников по должностям, а функция FIRST_VALUE применяется к каждой из секций по отдельности. Предложение ORDER BY, указанное в предложении OVER, определяет логический порядок, в котором функция FIRST_VALUE применяется к строкам каждой секции. Предложение ROWS UNBOUNDED PRECEDING задает начальную точку окна в качестве первой строки каждой секции.
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;
Здесь приводится частичный результирующий набор.
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