Postgresql用Postgresql的窗口函数搞定"直至本期累计"问题

              今年个税改革从每月工资作为基数扣税改为按年工资作为基数扣税,  需要新开一个表记录每个职员每期工资数据

CREATE TABLE xx_tax_trx (
	fx_payperiod varchar (6) NOT NULL , --工资月份
	fx_staff_id varchar (8) NOT NULL , --职员编号
	fx_tax_base numeric(10, 2) NULL ,  -- 缴税基数
	fx_tax_by_year numeric(10, 2) NULL , --直至本期为止,本年已缴税总额
	fx_tax_period numeric(10, 2) NULL , --本期应缴个税(fx_tax_by_year - 已缴个税总数)
	CONSTRAINT xt_pkey_xx PRIMARY KEY  
	(
		fx_payperiod,
		fx_staff_id
	)  
) 

其中有一个栏位fx_tax_by_year用于存放至于本期为止本年共交了多少个税.

      初始化这个表的时候, 要将往年一年的每个职员的工资放在这里,并计算fx_tax_by_year的值, 可以利用pg的窗口函数完成 :

update xx_tax_trx as a
set fx_tax_by_year= b.sum_tax
from (select fx_staff_id, fx_payperiod,fx_tax_period,
   sum(fx_tax_period) over (partition by fx_staff_id order by fx_payperiod) as sum_tax from xx_tax_trx  
) as b where a.fx_staff_id=b.fx_staff_id and a.fx_payperiod=b.fx_payperiod ;

见下表, 第2条记录的415.06等待上一条记录的276.62+本记录的138.44, 下一个月的第3条记录560.92=276.62+138.44+145.86

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值