Получить предыдущий закрытый баланс в качестве открытого баланса диапазона дат - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть три таблицы, products, stock or inwards, loading or outwards

, поэтому я хочу получить запрос sql, который будет вычислять закрытое сальдо по этой формуле в диапазоне дат

Закрытый баланс = Открытый баланс + внутрь-наружу

Например

таблица продуктов

Id      ProductName OpenStock
1        Item 1      500
2        Item 1      40
3        Item 1      700
4        Item 1      80

Склад таблица (предположим, нет в наличии)

id   pid  qty   Indate
1    1     0    2020-04-28
2    2     0    2020-04-28
3    3     0    2020-04-28

Таблица загрузки

id   pid  qty     Outdate
1    1     30    2020-04-28
2    2     50    2020-04-28
3    3     30    2020-04-28

Ожидаю, что сегодня сводка акций будет такой

Pid     OB     inward  outward   CB
  1     500      0        30    470
  2     400      0        50    350
  3     700      0        30    670
  ....

Так что завтра (следующий date) Мы ожидаем, что при отсутствии сводного запаса количества Inward или Ourwards будет и так далее:

  Pid     OB     inward  outward   CB
  1     470      0        30      470
  2     350      0        50      350
  3     670      0        30      670

Что я могу заархивировать в этом stock summary запросе sql и что если я захочу выберите от даты к дате

это мой sql запрос, который возвращает скриншот ниже, но не работает правильно

    public function searchstockview(Request $request) {

       request()->validate([

        'startdate' =>'required',
        'enddate' => 'required',
       ]);
    $startdate=$request->startdate;
    $enddate=$request->enddate;
    $viewstockbydate= DB::select(DB::raw(" SELECT 
        products.id, 
        products.name,products.open_stock as open_balance,
        (select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id and 
       DATE(loadings.created_at)  BETWEEN STR_TO_DATE('$startdate','%m/%d/%Y') AND 
      STR_TO_DATE('$enddate','%m/%d/%Y')  ) as total_loadings_specific_date,

        (select categories.name from categories where categories.id=products.category_id) as 
       category_name,

        (select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id and 
        DATE(stocks.created_at)  BETWEEN STR_TO_DATE('$startdate','%m/%d/%Y') AND 
        STR_TO_DATE('$enddate','%m/%d/%Y')  ) as total_stocks_specific_date
        from products"));
           }

имейте в виду, что этот запрос я беру open_balance, total_loadings_specific_date, total_stocks_specific_date и вставьте формуляр выше, чтобы получить закрытый баланс, но этот лог c не верен, мне нужны новые идеи. как решить эту проблему

enter image description here

1 Ответ

0 голосов
/ 28 апреля 2020

В любой день вы можете сделать следующее:

select p.*, s.inward, l.outward,
       (p.openstock - coalesce(l.outward, 0) + coalesce(l.inward, 0)) as in_stock
from products p left join
     (select s.pid, sum(s.qty) as inward
      from stock s
      group by s.pid
     ) s
     on s.pid = p.id left join
     (select l.pid, sum(l.qty) as outward
      from loading l
      group by l.pid
     ) l
     on l.pid = p.id;

Если вы хотите выполнить фильтрацию по определенной дате в прошлом, добавьте фильтр в подзапросах.

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