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() 函数是一个非常实用的窗口函数,用于返回窗口中的第一个值。它经常与其他聚合函数一起使用,以获得更复杂的计算。