LAG 和 LEAD

LAG 函数在同一结果集中的当前行之前提供行数据。例如,在 SELECT 语句中,你可以将当前行中的值与前一行中的值进行比较。

你使用标量表达式指定应比较的值。offset 参数是将在比较中使用的当前行之前的行数。如果未指定行数,则使用一行的默认值。

default 参数指定当 offset 处的表达式具有 NULL 值时应返回的值。如果未指定值,则返回 NULL 的值。

LEAD 函数提供行集中当前行之后的行数据。例如,在 SELECT 语句中,你可以将当前行中的值与下一行中的值进行比较。

你可以使用标量表达式指定应进行比较的值。offset 参数是将在比较中使用的当前行之后的行数。

你可以使用 default 参数指定当 offset 处的表达式具有 NULL 值时应返回的值。如果未指定这些参数,则使用默认的一行,并返回值 NULL

SELECT BusinessEntityID, SalesYTD,
       LEAD(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lead value",
       LAG(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lag value"
FROM SalesPerson;

此示例使用 LEAD 和 LAG 函数将每个员工的销售值与上面和下面列出的员工的销售值进行比较,并根据 BusinessEntityID 列排序记录。

BusinessEntityID SalesYTD 领先价值 滞后值
274 559697.5639 3763178.1787 0.0000
275 3763178.1787 4251368.5497 559697.5639
276 4251368.5497 3189418.3662 3763178.1787
277 3189418.3662 1453719.4653 4251368.5497
278 1453719.4653 2315185.6110 3189418.3662
279 2315185.6110 1352577.1325 1453719.4653