Запрос на получение номера запасного запаса для каждого item_id на MySQL - PullRequest
0 голосов
/ 30 марта 2020

Я использую MySQL 8.0, которые уже поддерживают оконную функцию. Учитывая текущий набор данных, как на изображении ниже набор данных с 2 видами элементов

Мне нужно получить позицию по акциям при каждом движении акций. С запросом, подобным приведенному ниже Вопрос: Как я могу изменить свой запрос, чтобы получить результат для всех видов элементов в одном запросе? Я не знаю, как сбросить переменную @stock в каждой группе.

Добавление столбца не является решением, так как мне нужно решить это в запросе. Добавление столбца потребовало бы, чтобы я вычислял каждый раз, когда новое промежуточное движение запасов добавлялось в промежутке между датами (будет иметь место дата возврата)

Ожидаемый набор результатов

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Используйте SUM() в качестве аналитической функции c:

SELECT
    item,
    item_date,
    item_qty,
    item_flow,
    SUM(item_qty*item_flow) OVER (PARTITION BY item ORDER BY item_date) AS running_stock
FROM stock
ORDER BY
    item,
    item_date;
0 голосов
/ 30 марта 2020

Получил рабочий запрос .. ссылка с здесь

> SELECT h.item, h.item_date, h.item_qty, h.item_flow,
>      @stock :=CASE WHEN @item_id=h.item THEN @stock + (h.item_qty*h.item_flow) ELSE h.item_qty * h.item_flow END AS
> running_stock,
>      @item_id:=h.item AS item_id FROM stock h CROSS JOIN (SELECT @stock := 0, @item_id := '') r  ORDER BY h.item, h.item_date,
> h.item_flow DESC

дает ожидаемые результаты, как я ожидал. Наиболее важным ключом является сброс значения @stock на значение по умолчанию (item_qty * item_flow) каждый раз, когда item изменение значения столбца

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