我正在使用PostgreSQL,并且有一个用于结算周期的表格,另一个用于结算周期内的付款。
我想知道如何根据每个结算周期后的最后付款日期剩余金额来计算利息。问题是,每次还款时,都必须根据此后的剩余金额计算利息。
我对构建此查询的想法是这样的。构建从结算周期的上一个支付日期到今天的所有日期的数据。使用分区,获取第一个日期的剩余金额。对于第二个日期,使用前一行的金额并添加兴趣,然后计算对此的兴趣。
不幸的是,我只是陷入困境,无法弄清楚如何将其变成查询!
这里提供了一些示例数据,以便于理解。
结算周期:
id | ends_at
-----+---------------------
1 | 2017-11-30
2 | 2017-11-30
付款:
amount | billing_cycle_id | type | created_at
-----------+------------------+---------+----------------------------
6000.0000 | 1 | payment | 2017-11-15 18:40:22.151713
2000.0000 | 1 |repayment| 2017-11-19 11:45:15.6167
2000.0000 | 1 |repayment| 2017-12-02 11:46:40.757897
因此,如果我们看到,用户在19日还款,因此利息截止日期(2017年11月30日)的应付金额仅为4000.因此,从30日到2日,利息将每天计算在4000。但是,从第二个开始,只需要在2000年计算利息。
利息计算(今天是2017-12-04):
date | amount | interest
------------+---------+----------
2017-12-01 | 4000 | 100 // First day of pending dues.
2017-12-02 | 2100 | 52.5 // Second day of pending dues.
2017-12-03 | 2152.5 | 53.8125 // Third day of pending dues.
2017-12-04 |2206.3125| // Fourth's day interest will be added tomorrow
答案 0 :(得分:0)
您的数据太稀疏了。需要编写此查询没有任何意义,因为随着时间的推移,查询将变得更加复杂。当利率随时间变化时会发生什么?
表格本身(或辅助表格,取决于您希望如何构建它)可以在每次存款/取款时添加一个运行余额。 (我建议这个表是加法的)否则你的计算和会计都比你应该的要困难得多。即使你在这里提出问题的方式,也没有足够的信息来进行计算。 (缺少利率)在这种情况下,您的存储过程将变得太复杂。复杂意味着错误,当你谈论他们的钱时,人们会对错误感到烦恼。