FIRST_VALUE (Transact-SQL)
傳回 SQL Server 2012 中排序值集的第一個值。
語法
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 相同的類型。
範例
A.針對查詢結果集使用 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
B.針對整個資料分割使用 FIRST_VALUE
下列範例使用 FIRST_VALUE 傳回相同職稱的員工中,休假時數最少的員工。 PARTITION BY 子句會依職稱分割員工,而 FIRST_VALUE 函數會個別套用至每個資料分割。 OVER 子句中指定的 ORDER BY 子句,可決定 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