mssql sqlserver 分析函数lag lead使用说明及简介


摘要:
下文讲述sqlserver 2012中 lag、lead分析函数的用法及简介
实验环境: sqlserver 2012


lag、lead:
可以不通过联结的形式获取上下相邻(指定偏移量)行的指定列的数据
lag 向前指定数据
lead向后指定数据
——————–
lag、lead参数说明:
参数1:列名
参数2:偏移量offset
参数3:进行偏移量计算后,无法得到结果时的缺省值
例:
lag分析函数举例说明

   declare @test table(keyId int,info varchar(20),qty int)
insert into @test (keyId,info,qty)values(-1,'a',2)
insert into @test (keyId,info,qty)values(1,'a',2)
insert into @test (keyId,info,qty)values(2,'a',10)
insert into @test (keyId,info,qty)values(3,'b',8)
insert into @test (keyId,info,qty)values(3,'b',8)
insert into @test (keyId,info,qty)values(5,'d',8)
insert into @test (keyId,info,qty)values(6,'b',9) 

 /*
   例: lag 在info群组中,
     向前偏移一行, 无法找到值时,使用默认值"-9"
    keyId=-1 在info ='a'群组中,向前偏移一行,无数据,所以为默认值-9
    keyId=1 在info ='a'群组中,向前偏移一行,上一行数据为-1 所以显示-1
    keyId=2 在info ='a'群组中,向前偏移一行,上一行数据为-1 所以显示-1
    keyId=3 在info ='b'群组中,向前偏移一行,无数据,所以为默认值-9
    keyId=3 在info ='b'群组中,向前偏移一行,上一行数据为-1 所以显示3
    keyId=6 在info ='b'群组中,向前偏移一行,上一行数据为-1 所以显示3
    keyId=5 在info ='d'群组中,向前偏移一行,无数据,所以为默认值-9 
 */ 
select *,
lag(keyId,1,'-9') over(partition by info order by keyId) as lagInfo 
 from @test 

mssql_sqlserver_lag详解举例-1

mssql_sqlserver_lag详解举例-1


—————————————
mssql_sqlserver_lag详解举例-2

mssql_sqlserver_lag详解举例-2


lead分析函数举例说明
lead 向后查找指定列数据,作为返回值,同lag的唯一区别为:查找方向不一样

   declare @test table(keyId int identity,info varchar(20),qty int)
insert into @test (info,qty)values('a',2)
insert into @test (info,qty)values('a',2)
insert into @test (info,qty)values('a',10)
insert into @test (info,qty)values('b',8)
insert into @test (info,qty)values('b',8)
insert into @test (info,qty)values('d',8)
insert into @test (info,qty)values('b',9) 

select *,
lead(keyId,1,'-9') over(order by keyId) as lagInfo 
 from @test 
mssql_sqlserver_lead详解举例-1

mssql_sqlserver_lead详解举例-1