sqlserver LEAD和LAG函数(学习记录)

可用于sqlserver 2012以后的版本,主要是查询当前数据的前几条数据或后几条数据的值

例:

LAG函数 往上取,取前几条的数据

WITH T AS
(
SELECT 1 ID,10 NUM
UNION ALL
SELECT 1,20
UNION ALL
SELECT 1,30
UNION ALL
SELECT 2,40
UNION ALL
SELECT 2,50
UNION ALL
SELECT 2,60
)


SELECT 
ID,
NUM,
LAG(NUM) OVER (PARTITION BY ID ORDER BY NUM) AS OneArgs,--根据id分组num排序,取上一条的记录
LAG(NUM,1) OVER (PARTITION BY ID ORDER BY NUM) AS TowArgs,--根据id分组num排序,取上一条的记录
LAG(NUM,2,0) OVER (PARTITION BY ID ORDER BY NUM) AS ThressArgs--根据id分组num排序,取上两条的记录,并且如果为空则默认为0
FROM T


--查询结果为
ID    NUM    OneArgs    TowArgs    ThressArgs
1     10      null        null          0
1     20      10          10            0
1     30      20          20            10
2     40      null        null          0
2     50      40          40            0
2     60      50          50            40

LEAD函数 往后取,取后几条的数据

WITH T AS
(
SELECT 1 ID,10 NUM
UNION ALL
SELECT 1,20
UNION ALL
SELECT 1,30
UNION ALL
SELECT 2,40
UNION ALL
SELECT 2,50
UNION ALL
SELECT 2,60
)



SELECT ID,NUM,
LEAD(NUM) OVER (PARTITION BY ID ORDER BY NUM) AS OneArgs,--根据id分组num排序,取下一条的记录
LEAD(NUM,1) OVER (PARTITION BY ID ORDER BY NUM) AS TowArgs,--根据id分组num排序,取下一条的记录
LEAD(NUM,2,0) OVER (PARTITION BY ID ORDER BY NUM) AS ThressArgs--根据id分组num排序,取下两条的记录,并且如果为空则显示为0
FROM T

------结果-------
ID    NUM    OneArgs    TowArgs    ThressArgs
1      10      20         20           30
1      20      30         30           0
1      30      null       null         0
2      40      50         50           60
2      50      60         60           0
2      60      null       null         0


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值