SQL Server SQL 中查询指定记录的上一条或下一条数据:LAG 和 LEAD 函数

xinggang · 2017年08月10日 · 90 次阅读

SQL Server 2012 支持以下分析函数: 解析函数基于一组行计算聚合值。 不过,与聚合函数不同,它们可能针对每个组返回多行。 可以使用分析函数来计算移动平均线、运行总计、百分比或一个组内的前 N 个结果。

LAG() 函数

语法:

LAG (scalar_expression [,offset] [,default]) OVER ( [ partition_by_clause ] order_by_clause )

功能描述:
可以访问结果集中的其它行而不用进行自连接。它允许去处理游标,就好像游标是一个数组一样。在给定组中可参考当前行之前的行,这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEAD()

示例:每天登记总量(Qty)后通过 LAG() 函数计算每天用量(sl=当天总量 - 昨天总量)

代码:

CREATE TABLE #temp ( [BillDate] date, [Qty] decimal(10,2) )
INSERT INTO #temp
VALUES
('2017-08-01', 10.00 ), 
('2017-08-02', 18.00 ), 
('2017-08-03', 25.00 ), 
('2017-08-04', 40.00 )

select * from #temp

select *,(Qty-lag(Qty,1,Qty) OVER (ORDER BY BillDate)) AS sl from #temp

DROP TABLE #temp

结果:

BillDate Qty
2017-08-01 10.00
2017-08-02 18.00
2017-08-03 25.00
2017-08-04 40.00
BillDate Qty     sl
2017-08-01 10.00 0.00
2017-08-02 18.00 8.00
2017-08-03 25.00 7.00
2017-08-04 40.00 15.00

LEAD() 函数

功能描述: LEAD与LAG相反,LEAD可以访问组中当前行之后的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行)

更多说明请参考官方文档:https://msdn.microsoft.com/zh-cn/library/hh231256(v=sql.110).aspx

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册