SQL Server LEAD()函数概述
在许多情况下,用户真的很想检查当前行的价值与后续行的价值。在 SQL Server 的 LEAD() 窗口函数中经常使用来解决这个问题。
带领() :
函数提供对位于该行之后的设置物理偏移处的行的访问。 LEAD()函数将允许访问下一行或下一行之后的行的数据,然后继续。
句法 :
LEAD(return_value, offset [, default])
OVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
)
在哪里 :
- 返回值——
后续行的 return_value 支持指定的偏移量。 return_value 必须是一个值。 - 抵消 -
偏移量是从当前行向前访问数据的行数。偏移量应该是一个正整数。如果不定义 offset 的默认值为 1。 - 默认 -
如果偏移量超出分区范围,则 LEAD()函数会产生默认值。如果未定义,默认为 NULL。 - PARTITION BY 子句 –
PARTITION BY 子句是可选的,它将结果集的行划分为使用 LEAD()函数的分区。 - ORDER BY 子句 –
ORDER BY 子句定义使用 LEAD()函数的每个分区中行的逻辑顺序。
示例 1:
假设我们有下表名为“CompanySales”:
Select *
from CompanySales;
Company | Year | Amount |
---|---|---|
ABC Ltd. | 2015 | 5000 |
XYZ Ltd. | 2015 | 4600 |
ABC Ltd. | 2017 | 5500 |
ABC Ltd. | 2016 | 5400 |
XYZ Ltd. | 2016 | 6500 |
ABC Ltd. | 2018 | 5400 |
XYZ Ltd. | 2017 | 4700 |
XYZ Ltd. | 2018 | 5400 |
示例 2:
SELECT TOP 10 [Company], [Year], [Amount],
LEAD(Amount, 1) OVER (
PARTITION BY Company
ORDER BY Year DESC
) AS Lead_amount
FROM [CompanySales] ;
输出 -
Company | Year | Amount | Lead_amount |
---|---|---|---|
ABC Ltd. | 2018 | 5400 | 5500 |
ABC Ltd. | 2017 | 5500 | 5400 |
ABC Ltd. | 2016 | 5400 | 5000 |
ABC Ltd. | 2015 | 5000 | NULL |
XYZ Ltd. | 2018 | 5400 | 4700 |
XYZ Ltd. | 2017 | 4700 | 6500 |
XYZ Ltd. | 2016 | 6500 | 4600 |
XYZ Ltd. | 2015 | 4600 | NULL |