показать начальный баланс и конечный баланс на основе выбранной даты PHP mysqlquery

#php #mysql

#php #mysql

Вопрос:

Я изменил свою транзакцию на одну единственную таблицу. Как я могу показать начальный баланс и конечный баланс на основе выбранной даты.

Вот моя новая таблица транзакций.

ИМЯ TBL: transaction_history

trans_itemdesc trans_qtyin trans_wtin trans_datein trans_qtyout trans_wtout trans_dateout Статус
Item1 500 5000 2020-11-01
Item2 300 3000 2020-11-25
Item1 200 2000 2020-11-01
Item1 50 2020-11-11
Item2 25 2020-11-31 Открыть
Item1 40 2020-11-31 Открыть
Item1 100 2020-11-04 Открыть

Желаемый результат по состоянию на ноябрь

Продукт БегБал В Выход EndBal
Item1 0 700 140 560
Item2 0 300 25 275

Вывод на следующий месяц

Продукт БегБал В Выход EndBal
Item1 560 0 0 660
Item2 275 0 0 275

Начальный баланс должен содержать конечный баланс за следующий месяц.

Комментарии:

1. с вашими изменениями ваши примерные начальные балансы больше не имеют смысла; объясните, как вы это вычисляете?

2. Начальный балл — это сумма конечного балла за предыдущий месяц начало месяца.

3. Рассмотрите возможность хранения всех транзакций в одной таблице

4. @SprakenDude Я понимаю это, но как вы вычисляете это из своих данных? откуда берется «800» для элемента 1 в ноябре, когда до ноября нет входящих или исходящих записей?

5. @ysth да, нет записей до ноября, но в ноябре есть In, который равен 800, поэтому 0 с предыдущего месяца IN в ноябре = 800

Ответ №1:

У вас действительно должна быть только одна таблица; отдельные входные и выходные таблицы создают больше проблем, чем решают. Угадывая некоторые из ваших имен столбцов, я подозреваю, что на самом деле у вас нет столбца с именем «Дата выхода» и т. Д

 select product as Product,
    coalesce(sum(case when dt < '2020-12-01' then amount end),0) as BegBal,
    coalesce(sum(case when dt between '2020-12-01' and '2020-12-31' and type='in' then amount end),0) as In,
    coalesce(sum(case when dt between '2020-12-01' and '2020-12-31' and type='out' then -amount end),0) as Out,
    coalesce(sum(case when dt <= '2020-12-31' then amount end),0) as EndBal
from (
    select 'in' as type, product, date_in as dt, in as amount from in
    union all
    select 'out' as type, product, date_out, -amount from out
) in_out;
 

Комментарии:

1. можете ли вы помочь мне с подзапросами, получающими начальный баланс, вход, выход и конечный баланс на основе выбранной даты. Я уже изменил свою таблицу на одну таблицу.