财务期初余额问题

截屏.png财务的期初余额表是每个月更新,本月的期末余额也就是下个月的期初余额只显示本月发生业务的客户,没发生业务的不显示,现在想要查询所有客户的余额,比如7月份发生业务的有余额,7月份未发生业务的显示六月的余额,以此类推,应该如何查询

回学然 发布于 2021-7-15 11:07 (编辑于 2021-7-15 11:35)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
擎天小胖Lv4见习互助
发布于2021-7-28 10:36

自己用row number partition by 解决了

最佳回答
0
luojian0323Lv7资深互助
发布于2021-7-15 11:13(编辑于 2021-7-15 12:26)

你这个逻辑也是有漏洞的,万一七月未发生业务,六月也未发生呢?

所以最有效的办法 是把每个客户小于当前月份的最后一个发生业务的月份查出来

并把最后一次发生业务月份的余额也查出来。然后union到当前月分表中

例如我这组数据:

image.png

处理后结果:

image.png

sql:

with yuer as (select 'A' ccusname客户名称,

 100 mb期初余额,

 200 me期末余额,

 '202107' iyperiod年月

 union all 

 select

 'B' ccusname客户名称,

 110 mb期初余额,

 290 me期末余额,

 '202105' iyperiod年月

  union all 

 select

 'B' ccusname客户名称,

 180 mb期初余额,

 390 me期末余额,

 '202102' iyperiod年月

  union all 

 select

 'C' ccusname客户名称,

 190 mb期初余额,

 490 me期末余额,

 '202102' iyperiod年月

   union all 

 select

 'C' ccusname客户名称,

 390 mb期初余额,

 190 me期末余额,

 '202107' iyperiod年月)

 select a.* from yuer a 

 where iyperiod年月='202107'

 union all 

 select a.* from yuer a where a.iyperiod年月<'202107' and a.iyperiod年月 in (select max(iyperiod年月) from yuer where ccusname客户名称=a.ccusname客户名称 and me期末余额>0 )

  • 回学然 回学然(提问者) 我的意思是六月未发生业务的再向上一个月查询,以此类推,跟您说的应该是一个意思,就是不知道怎么写
    2021-07-15 11:23 
  • luojian0323 luojian0323 回复 回学然(提问者) 表结构和样本数据发一份。我帮你写。不过不一定能立马写出来
    2021-07-15 11:24 
  • 回学然 回学然(提问者) 数据库表里面有以下几列,ccusname客户名称,mb期初余额,me期末余额,iyperiod年月
    2021-07-15 11:26 
  • luojian0323 luojian0323 回复 擎天小胖(提问者) 然后把查询到的期末余额相加就是你要的所有客户期末余额。
    2021-07-15 12:27 
  • 1关注人数
  • 465浏览人数
  • 最后回答于:2021-7-28 10:36
    请选择关闭问题的原因
    确定 取消
    返回顶部