Как посчитать баланс в бухгалтерии с использованием postgres с таблицей соединений - PullRequest
0 голосов
/ 06 августа 2020

У меня такая же проблема с этим вычислить баланс в postgres, но с таблицей соединения.

У меня есть таблица A с

ID      amount     deduct_id     created_time
1      100.00          1         2020-01-01 15:30:20
2       10.00          1         2020-01-01 15:32:20 
3       30.00          1         2020-01-01 15:43:20
4        5.00          1         2020-02-02 08:30:20
5       10.00          2         2020-02-02 23:30:20
6       20.00          2         2020-02-03 10:30:20

и таблица B с

deduct_id      amount      created_time
1              100.00      2020-02-02 10:00:20
2               15.00      2020-02-03 10:00:20

Теперь мне нужен запрос, который дает следующий результат:

ID     amount    deduct    Balance    created_time
1      100.00     0.00      100.00    2020-01-01 15:30:20
2       10.00     0.00      110.00    2020-01-01 15:32:20
3       30.00     0.00      140.00    2020-01-01 15:43:20
4        5.00     0.00      145.00    2020-02-02 08:30:20
null     0.00   100.00       45.00    2020-02-02 10:00:20
5       10.00     0.00       55.00    2020-02-02 23:30:20
null     0.00    15.00       40.00    2020-02-03 10:00:20
6       20.00     0.00       60.00    2020-02-03 10:30:20

Я использую postgres 9,6

deduct_id указывает, являются ли данные частью вычета на эту дату.

created_time указывает временную шкалу.

[Обновлено] и как добиться фильтрации по месяцам?

ID     amount    deduct    Balance    created_time
1      100.00     0.00      100.00    2020-01-01 15:30:20
2       10.00     0.00      110.00    2020-01-01 15:32:20
3       30.00     0.00      140.00    2020-01-01 15:43:20


ID     amount    deduct    Balance    created_time
4        5.00     0.00      145.00    2020-02-02 08:30:20
null     0.00   100.00       45.00    2020-02-02 10:00:20
5       10.00     0.00       55.00    2020-02-02 23:30:20
null     0.00    15.00       40.00    2020-02-03 10:00:20
6       20.00     0.00       60.00    2020-02-03 10:30:20

Я знаю, что это плохой дизайн таблицы, но можно ли добиться такого результата? как бы это было сделано?

заранее спасибо, любая помощь очень ценится.

1 Ответ

2 голосов
/ 06 августа 2020

Я думаю, что это union all и окно sum():

select
    id,
    amount,
    deduct,
    sum(amount - deduct) over(order by created_time) balance,
    created_time
from (
    select id, amount, 0 as deduct, created_time from tablea
    union all 
    select null, 0 as amount, amount as deduct, created_time from tableb
) t

Мне неясно, для какого столбца deduct_id предполагается использовать. Судя по результатам запроса, похоже, что вы не хотите использовать его для определения разделов, в отличие от того, что я мог подумать, поэтому я просто удалил if из запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...