Как выбрать строку с самым последним уменьшением значения столбца от того же значения столбцов в предыдущей строке? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть набор данных инвентаризации, где сумма увеличивается с заданной скоростью. Например, инвентарь увеличивается на десять единиц каждый день. Однако время от времени будет происходить сокращение запасов, которое может быть любым. Мне нужен запрос, который может найти мне самое последнее сокращение запасов и вернуть мне сумму этого вычета.

Моя таблица содержит дату и количество для многочисленных идентификаторов предметов. Теоретически я пытаюсь выбрать все суммы и даты для данного идентификатора товара, а затем найти разницу между самым последним сокращением запасов за два дня. В связи с тем, что отслеживаются несколько элементов, нет гарантии, что столбец идентификатора будет последовательным для набора элементов.

Исследование, чтобы найти решение этой проблемы, было совершенно ошеломляющим. Кажется, что оконные функции могли бы быть хорошим способом попробовать, но я никогда не использовал их и даже не имел понятия, с чего начать.

Хотя я мог легко возвращать суммы и выполнять вычисления в PHP, я чувствую, что здесь нужно использовать SQL, но мой опыт работы с более сложными запросами ограничен.

ID | ItemID | Date       | Amount 
1      2      2019-05-05   25
7      2      2019-05-06   26
34     2      2019-05-07   14
35     2      2019-05-08   15
67     2      2019-05-09   16
89     2      2019-05-10   5
105    2      2019-05-11   6

Учитывая данные выше, было бы неплохо увидеть результат как:

item id | date       | reduction
2         2019-05-10   11

Это связано с тем, что последнее сокращение запасов происходит между 67 и 89 идентификаторами, а сумма сокращения составляет 11 мая 2019 года.

1 Ответ

1 голос
/ 07 июня 2019

В MySQL 8+ вы можете использовать lag():

select t.*, (prev_amount - amount) as reduction
from (select t.*,
             lag(amount) over (partition by itemid order by date) as prev_amount
      from t
     ) t
where prev_amount > amount
order by date desc
limit 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...