SQL语句开窗函数写法和用法

已知:期初=每个月1号某系统的期初值 a、每日购进数b、每日销售数c、每日损溢数d

求:

①1号期末=a+b-c+d

②2号的期初值=1号的期末,3号的期初=2号的期末值,以此类推

我用了lag函数,但只能出来第2天,第3天之后的都没出来,求大神指导具体该怎么写

SQL 楚小白 发布于 2024-4-9 09:12
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
快乐星光Lv5中级互助
发布于2024-4-9 09:49

接用楼上数据,可以参考一下

image.png

  • 楚小白 楚小白(提问者) 大恩人,太感谢了,我折腾了差不多一天,终于完美解决了这个问题(ಥ _ ಥ)(ಥ _ ಥ)
    2024-04-09 13:57 
最佳回答
0
华莉星宸Lv7资深互助
发布于2024-4-9 09:14

这个要写个存储过程,

每日处理就好了

最佳回答
0
Z4u3z1Lv6专家互助
发布于2024-4-9 09:15(编辑于 2024-4-9 09:28)

先算出A+B-C+D,重命名为E 然后lag 对E进行累加

------------

with test as (

select '2024-04-01' [rq],10 [a],2 [b],5 [c],7 [d]

union all

select '2024-04-02' [rq],0 [a],3 [b],15 [c],37 [d]

union all

select '2024-04-03' [rq],0 [a],4 [b],5 [c],27 [d]

union all

select '2024-04-04' [rq],0 [a],5 [b],8 [c],7 [d]

union all

select '2024-04-05' [rq],0 [a],6 [b],9 [c],2 [d]

union all

select '2024-04-06' [rq],0 [a],7 [b],5 [c],8 [d]

union all

select '2024-04-07' [rq],0 [a],18 [b],12 [c],1 [d]

union all

select '2024-04-08' [rq],0 [a],9 [b],11 [c],7 [d]

union all

select '2024-04-09' [rq],0 [a],10 [b],7 [c],17 [d]

)

SELECT *,SUM(E) OVER(PARTITION BY '' ORDER BY RQ ASC) [KC] FROM (

select *,a+b-c+d [E] from test

)T

RQ                    A    B        C    D        E        KC

2024-04-01 10 2 5 7 14 14

2024-04-02 0 3 15 37 25 39

2024-04-03 0 4 5 27 26 65

2024-04-04 0 5 8 7 4 69

2024-04-05 0 6 9 2 -1 68

2024-04-06 0 7 5 8 10 78

2024-04-07 0 18 12 1 7 85

2024-04-08 0 9 11 7 5 90

2024-04-09 0 10 7 17 20 110

  • 楚小白 楚小白(提问者) 我就是这样算的,但它只能出来第2天,第3天就出不来了
    2024-04-09 09:18 
  • Z4u3z1 Z4u3z1 回复 楚小白(提问者) 参考上面的SQL
    2024-04-09 09:29 
  • 楚小白 楚小白(提问者) 回复 Z4u3z1 太感谢了,您提供的答案非常有用,但是快乐星光老师的答案,我一看就会了,所以我采纳了他的~~还是非常谢谢你们,帮我解决了大难题🌼🌼🍺🍺
    2024-04-09 13:57 
  • 3关注人数
  • 223浏览人数
  • 最后回答于:2024-4-9 09:49
    请选择关闭问题的原因
    确定 取消
    返回顶部