值为累计值,如何计算出每个月的数据

某一数据表有以下三个字段

yearmonvalue
20211100
20212200
20213340
20214550
20215760
20216890

value的值为累计值,即2021年3月的值是累计1、2、3月的值,

请问如何在SQL里直接计算成每个月的值

访客登录 发布于 2021-10-29 14:29
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
七夜Lv6初级互助
发布于2021-10-30 22:51

select year,mon,value - lag(value,1,0) over ( order by year,mon)  from kkk;

试一下吧,没测试。

可以查一下 lag()\lead()函数的用法

  • 访客登录 访客登录(提问者) 有用的,我查到一个帖子用的也是这个函数,效果还不错,完整的句子大概是select year,mon,value - lag(value,1,0) over (partition by year order by mon) from table 原贴http://www.itpub.net/thread-1565167-1-1.html
    2021-11-01 11:49 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-10-29 14:39

什么数据库都不说

最佳回答
0
FuFuLv5初级互助
发布于2021-10-29 14:39(编辑于 2021-10-29 14:41)

WITH AA AS  ( SELECT A1.YEAR, A1.MON, A1.VALUE  V1,A2.VALUE V2 FROM A A1 LEFT JOIN A A2  ON A1.YEAR=A2.YEAR AND A1.MON=A2.MON-1 ) SELECT YEAR,MON,V1-V2 AS VALUE FROM AA ORDER BY YEAR,MON

大概是这样

你要算单个的,那每个月都是前边月的累计,当前月的,就拿当前月的减上月 的就可以了

如果要跨年的话,那就给这个编号,让编号=编号-1

最佳回答
0
北纬六十六度Lv4初级互助
发布于2021-10-29 14:44

create table #test(year int,mon int,value int)

insert into #test(year,mon,value) values(2021,1,100)

insert into #test(year,mon,value) values(2021,2,200)

insert into #test(year,mon,value) values(2021,3,340)

insert into #test(year,mon,value) values(2021,4,550)

insert into #test(year,mon,value) values(2021,5,760)

insert into #test(year,mon,value) values(2021,6,890)

select a.*,case when a.mon>1 then a.value-b.value else a.value end as value1 from #test a,#test b where a.year=b.year and a.mon-1=b.mon

value1就是每月的

最佳回答
0
让过去Lv6中级互助
发布于2021-10-29 14:45

image.png

  • 5关注人数
  • 450浏览人数
  • 最后回答于:2021-10-30 22:51
    请选择关闭问题的原因
    确定 取消
    返回顶部