我有3个表Invoice,Payments和InterestRate。为简单起见,我将每个表表示如下。
“发票”表具有以下列(InvNum是主键)
+--------------+-------------+---------------+
| InvNum | InvDate | InvAmt |
+--------------+-------------+---------------+
| 123 | 2017-03-09| 15000 |
| 456 | 2017-01-13| 20000 |
+--------------+-------------+---------------+
“付款”表如下(“付款”表中的InvNum是一个外键,它链接到上面的“发票”表
+--------------+------------+----------+
| payment_date | InvNum | amount |
+--------------+------------+----------+
| 2017-08-10 | 123 | 5000 |
| 2017-08-15 | 456 | 3000 |
| 2017-09-15 | 123 | 3000 |
| 2017-10-11 | 456 | 4000 |
| 2017-10-16 | 123 | 3500 |
| 2017-11-10 | 123 | 3000 |
| 2017-11-15 | 456 | 2500 |
+--------------+------------+----------+
我的InterestRate看起来像这样
+--------------+-------+
| ResetDate | IntRate|
+--------------+--------+
| 2016-01-01| 10 |
| 2017-06-08| 10.25 |
| 2017-11-03| 10.67 |
| 2018-05-03| 10.83 |
| 2018-07-29| 10.72 |
| 2019-01-01| 10.67 |
+------------+----------+
我需要做的是在考虑了每笔付款和发票上的最终余额(如果尚未全额支付)之后计算每张发票的利息。决赛桌应该像这样
InvNum IntFrom IntTo Amount IntRate Interest Payment Balance
123 2017-03-09 2017-06-07 15000 10 xxx 0 15000
123 2017-06-08 2017-08-10 15000 10.25 yyy 5000 10000
123 2017-08-11 2017-09-15 10000 10.25 zzz 3000 7000
123 2017-09-16 2017-10-16 7000 10.25 aaa 3500 3500
123 2017-10-17 2017-11-02 3500 10.67 bbb 0 3500
123 2017-11-03 2017-11-15 3500 10.67 ccc 2500 1000
123 2017-11-16 2018-05-02 1000 10.67 ddd 0 1000
123 2018-05-03 2018-07-28 1000 10.83 eee 0 1000
123 2018-07-29 2018-12-31 1000 10.72 fff 0 1000
123 2019-01-01 (today) 1000 10.67 ggg 0 1000
我没有显示Inv#456的结果。但是所需的解决方案需要将发票表中的每个发票分组。
因此,实际上,利息计算考虑了针对每张发票的付款(在“付款”表中列出)以及不断变化的利率(在“利息率”表中列出)。同样重要的是,需要计算每张发票上的应付余额的利息(inv#123为1000),直到运行查询之日为止。
我还面临的挑战之一是如何在表格中捕获上述结果。这是否意味着每次您运行查询都将删除并重新创建表(因为每次日期更改时,应付余额中的利息金额都会发生变化)。因此,除非只能更新每张发票余额上的利息,否则(应该?)必然意味着必须删除该表并重新创建该表。或者,必须通过视图查询来查看结果。
我希望我能够令人满意地阐明我的问题。
非常感谢您的时间和精力帮助我。