SQL Server FIRST_VALUE() 函数使用指南
FIRST_VALUE()
函数是一个窗口函数,用于从一个窗口中返回第一个值。该函数在 SQL Server 2012 版本中首次引入。
语法
FIRST_VALUE (scalar_expression) OVER
( [ partition_by_clause ] order_by_clause rows_range_clause )
scalar_expression
: 必需,要返回第一个值的列或表达式。partition_by_clause
: 可选,用于将窗口划分为分区的列或表达式。order_by_clause
: 必需,用于指定排序顺序的列或表达式。rows_range_clause
: 可选,用于指定在窗口中包含多少行。
使用场景
FIRST_VALUE()
函数常用于以下场景:
- 返回一个分组中第一个行的值。
- 获取窗口中的第一个值,以便进一步计算。
示例
示例 1
考虑一个员工表,其中包含员工的 ID、姓名和销售额。我们想要查询每个部门中销售额最高的员工。
SELECT Department,
FIRST_VALUE(Name) OVER (
PARTITION BY Department
ORDER BY Sales DESC
) AS TopSalesperson
FROM EmployeeSales;
输出:
Department | TopSalesperson |
---|---|
Marketing | Alice |
Sales | Bob |
Engineering | Charlie |
示例 2
考虑一个销售表,其中包含销售日期、销售员和销售额。我们想要计算每个销售员的销售额与其第一笔销售额的比率。
SELECT Salesperson,
Sales,
FIRST_VALUE(Sales) OVER (
PARTITION BY Salesperson
ORDER BY SaleDate
) AS FirstSale,
Sales / FIRST_VALUE(Sales) OVER (
PARTITION BY Salesperson
ORDER BY SaleDate
) AS SalesRatio
FROM SalesTable;
输出:
Salesperson | Sales | FirstSale | SalesRatio |
---|---|---|---|
Alice | 100 | 50 | 2 |
Alice | 200 | 50 | 4 |
Bob | 150 | 100 | 1.5 |
Bob | 200 | 100 | 2 |
Charlie | 50 | 50 | 1 |
Charlie | 100 | 50 | 2 |
Charlie | 150 | 50 | 3 |
结论
FIRST_VALUE()
函数是一个非常实用的窗口函数,用于返回窗口中的第一个值。它经常与其他聚合函数一起使用,以获得更复杂的计算。