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