下面的代码计算表ACCOUNT
和的运行未结余额PAYMENT
:
select
b.payment_date,
a.account_no, a.accountname, a.loan_amount,
b.amount,
ob = a.loan_amount - sum(b.amount) over (partition by b.account_no order by b.payment_date)
from
account a
inner join
(select * from payment) b on a.account_no = b.account_no
order by
a.account_no, b.payment_date
付款:
+--------------+------------+----------+
| payment_date | account_no | amount |
+--------------+------------+----------+
| 2017-08-10 | 123456789 | 5000 |
| 2017-08-15 | 987654321 | 3000 |
| 2017-09-15 | 987654321 | 3000 |
| 2017-10-11 | 123456789 | 4000 |
| 2017-10-16 | 987654321 | 3500 |
| 2017-11-10 | 123456789 | 3000 |
| 2017-11-15 | 987654321 | 2500 |
+--------------+------------+----------+
帐户:
+--------------+-------------+---------------+
| account_no | accountname | loan_amount |
+--------------+-------------+---------------+
| 123456789 | John | 15000 |
| 987654321 | Jane | 20000 |
+--------------+-------------+---------------+
查询结果:
+--------------+------------+----------+----------------------+
| payment_date | account_no | amount | outstanding_balance |
+--------------+------------+----------+----------------------+
| 2017-08-10 | 123456789 | 5000 | 10000 |
| 2017-10-11 | 123456789 | 4000 | 6000 |
| 2017-11-10 | 123456789 | 3000 | 3000 |
| 2017-08-15 | 987654321 | 3000 | 17000 |
| 2017-09-15 | 987654321 | 3000 | 14000 |
| 2017-10-16 | 987654321 | 3500 | 11500 |
| 2017-11-15 | 987654321 | 2500 | 9000 |
+--------------+------------+----------+----------------------+
我想在计算中添加折扣表。此表包含与Payment表相同的结构。
折扣
+--------------+------------+----------+
| payment_date | account_no | amount |
+--------------+------------+----------+
| 2017-08-10 | 123456789 | 100 |
| 2017-08-15 | 987654321 | 100 |
| 2017-09-15 | 987654321 | 100 |
+--------------+------------+----------+
所以我决定在下面的查询中添加一个 UNION。但它返回不正确。价值观。请帮忙
select
b.payment_date,
a.account_no, a.accountname, a.loan_amount,
b.amount,
ob = a.loan_amount - sum(b.amount) over (partition by b.account_no order by b.payment_date)
from
account a
inner join
(select * from payment union select * from discount) b on a.account_no = b.account_no
order by
a.account_no, b.payment_date