MYSQL прогноз дефицита акций - PullRequest
0 голосов
/ 06 апреля 2020

Я довольно долго ломал голову над тем, как заставить это работать, и, поскольку это так конкретно c Я не могу найти ответ где-нибудь еще в StackOverflow. Будем благодарны за любые ответы или предложения.

Я работаю над подготовкой отчета, который проинформирует пользователя об управлении запасами и потреблении. Рассчитать это с помощью значений current_stock и daily_stock_consump очень просто ... Но когда мы добавляем поставки, поступающие в процесс, все становится очень сложным. Получение MYSQL возврата в первый день, когда каждая акция достигает 0, оставляет меня пустым.

Например, предположим, что мы продаем фрукты, и у нас есть три стола fruit, fruit_sold и fruit_orders fruit

|---------------------|------------------|
|          id         |       fruit      |
|---------------------|------------------|
|          1          |       Apples     |
|---------------------|------------------|
|          2          |      Oranges     |
|---------------------|------------------|
|          3          |       pears      |
|---------------------|------------------|

fruit_sold

|---------------------|------------------|------------------|------------------|
|          id         |     fruit_id     |   sold_per_day   |     day_sold     |
|---------------------|------------------|------------------|------------------|
|          1          |         1        |        101       |    1585695600    |
|---------------------|------------------|------------------|------------------|
|          2          |         2        |        445       |    1585695600    |
|---------------------|------------------|------------------|------------------|
|          3          |         3        |        214       |    1585782000    |
|---------------------|------------------|------------------|------------------|
|          4          |         1        |        512       |    1585782000    |
|---------------------|------------------|------------------|------------------|

fruit_orders

|---------------------|------------------|------------------|
|          id         |     arriving     |      fruit_id    |
|---------------------|------------------|------------------|
|          1          |    1592607600    |        1         |
|---------------------|------------------|------------------|
|          2          |    1586905200    |        3         |
|---------------------|------------------|------------------|
|          3          |    1590534000    |        2         |
|---------------------|------------------|------------------|
|          4          |    1588287600    |        3         |
|---------------------|------------------|------------------|
|          5          |    1593126000    |        1         |
|---------------------|------------------|------------------|
|          6          |    1592607600    |        2         |
|---------------------|------------------|------------------|

Пока у меня есть

SELECT SUM(fruit_sold.sold_per_day) / 2 AS consumption, fruit.fruit
FROM fruit_sold
LEFT JOIN fruit
ON fruit_sold.fruit_id = fruit.id
GROUP BY fruit_sold.fruit_id

Как бы я также вернул число дней до истечения запаса (с учетом поступающих заказов и дат их прибытия) для каждого фрукта?

Мы хотим вернуть следующее:

|---------------------|------------------|------------------|------------------|
|          id         |     fruit        |    consumption   |  days_until_gone |     |
|---------------------|------------------|------------------|------------------|
|          1          |       apples     |        306.5     |        2         |
|---------------------|------------------|------------------|------------------|
|          2          |      oranges     |        222.5     |        16        |
|---------------------|------------------|------------------|------------------|
|          3          |       pears      |        107       |        3         |
|---------------------|------------------|------------------|------------------|

1 Ответ

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

Вы можете получать числа в день, используя union all, агрегацию и оконные функции:

select fruit_id, day_sold, sum(sold_per_day), sum(orders),
       sum(sum(sold_per_day - orders)) over (partition by fruit_id order by day_sold) as net
from ((select fruit_id, day_sold, sold_per_day, 0 as orders
       from fruit_sold
      ) union all
      (select fruit_id, as day_sold, 0 as sold_per_day, count(*) as orders
       from fruit_sold
       group by fruit_id, day_sold
      ) 
     ) f
group by fruit_id, day_sold;

Я не на 100% отношусь к вашим образцам данных, но, похоже, в основном обеспечивает информация, которую вы хотите.

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