Расчет среднемесячного потребления - PullRequest
0 голосов
/ 16 ноября 2018

Я работаю над проектом по самосовершенствованию управления запасами в Laravel 4, но не могу найти лучший способ выполнить расчет среднемесячного потребления (AMC).

У меня есть две таблицы, т.е. товары таблица (id,item_name,price) и фондовая карта (id, item_id, qty_in, qty_out,transaction_date), из которой я должен получить расчет AMC.

FORMULA = (sum of current month's qty_out + sum of previous two month's qty_out) / 3 

Может кто-нибудь выручить меня за то, какпойти на это в простом PHP и MySQL?

1 Ответ

0 голосов
/ 16 ноября 2018

Вы должны быть в состоянии сделать это, используя условную агрегацию, например:

   drop table if exists t;

create table t(item int,qty_out int , dt date);

insert into t values
(1,1,'2018-09-01'),(1,1,'2018-10-01'),(1,1,'2018-11-01');

select item,
         sum(case when year(dt)*12 + month(dt) = year(now()) * 12 + month(now()) then qty_out else 0 end) thismm,
         sum(case when year(dt)*12 + month(dt) = (year(now()) * 12 + month(now()) -1) or
                            year(dt)*12 + month(dt) = (year(now()) * 12 + month(now()) -2) then qty_out else 0 end) last2mm,
         (sum(case when year(dt)*12 + month(dt) = year(now()) * 12 + month(now()) then qty_out else 0 end) +
         sum(case when year(dt)*12 + month(dt) = (year(now()) * 12 + month(now()) -1) or
                            year(dt)*12 + month(dt) = (year(now()) * 12 + month(now()) -2) then qty_out else 0 end)
         ) / 3  amc
from t
where year(dt)*12 + month(dt) >= (year(now()) * 12 + month(now()) -2)
group by item ;
+------+-----------+-------+--------+
| item | thismonth | last2 | amc    |
+------+-----------+-------+--------+
|    1 |         1 |     2 | 1.0000 |
+------+-----------+-------+--------+
1 row in set (0.01 sec)

Обратите внимание на преобразование в число месяцев, чтобы упростить даты в конце года.Конечно, если вы ищете скользящее среднее значение за 3 месяца, тогда это был бы другой вопрос.

...