SQL Server 2012 支持以下分析函数: 解析函数基于一组行计算聚合值。 不过,与聚合函数不同,它们可能针对每个组返回多行。 可以使用分析函数来计算移动平均线、运行总计、百分比或一个组内的前 N 个结果。
语法:
LAG (scalar_expression [,offset] [,default]) OVER ( [ partition_by_clause ] order_by_clause )
功能描述:
可以访问结果集中的其它行而不用进行自连接。它允许去处理游标,就好像游标是一个数组一样。在给定组中可参考当前行之前的行,这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEAD()
代码:
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与LAG相反,LEAD可以访问组中当前行之后的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行)
更多说明请参考官方文档:https://msdn.microsoft.com/zh-cn/library/hh231256(v=sql.110).aspx