mssql sqlserver 使用sql脚本取上一条数据与下一条数据之差,递归计算的方法分享


摘要:
下文通过举例的方式讲述,获取数据表中上一条数据同下一条数据的计算方法,如下所示:



实现思路:
1.使用row_number开窗函数对数据表进行编号
2.使用cte表达式缓存数据
3.利用左联接获取所需的结果

  create table [maomao365.com]
(keyId int identity,qty int)
go

---基础数据生成
insert into [maomao365.com](qty)
values(10),(8),(7),(6),(8),
(2),(100),(200),(88),(78),(99)

---使用row_number生成cte表达式
;
with cteName (keyIdNew,qty)
as
(
 select ROW_NUMBER() 
  over(order by qty asc) as keyIdNew,
  qty
  from [maomao365.com] 
 )  

select a.*,
isnull(b.qty,0)-isnull(a.qty,0) as qtyCha
from cteName a 
left join cteName b on b.keyIdNew = (a.keyIdNew+1)
go

go
truncate table [maomao365.com]
drop     table [maomao365.com]

相关阅读:
row_number、rank、dense_rank用法简介
使用cte表达式更新数据的方法
with cte表达式(递归)找出最顶值的方法
cte表达式用法简介