Текущий баланс на таблицах объединения
Код ниже вычисляет текущий непогашенный остаток для таблиц 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 |
+--------------+-------------+---------------+
QUERY RESULT:
+--------------+------------+----------+----------------------+
| 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_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
2 ответа
Сумма скидки не отражается в ваших расчетах.ob = a.loan_amount - сумма (b.amount), в которой объединение может быть необязательно, поскольку скидка - это отдельная таблица, вы можете просто присоединиться к ней и использовать сумму скидки, чтобы уменьшить loan_amount ob = (a.loan_amount- discount_amount) - сумма (b.amount)
Используйте другой INNER JOIN
select
b.payment_date,
a.account_no,
a.loan_amount,
b.amount,
ob = a.loan_amount - sum(b.amount) over (partition by b.account_no order by b.payment_date),
d.amount
from
account a
inner join
payment b on a.account_no = b.account_no
inner join
discount d on (d.account_no = b.account_no and d.payment_date = b.payment_date)
order by
a.account_no, b.payment_date