如何从上一行的相同列值中选择列值最近减少的行?

时间:2019-06-06 22:50:41

标签: mysql sql

我有一组库存数据,其数量以给定的速率增加。例如,库存每天增加十个单位。但是,有时会减少任何数量的库存。我需要一个查询,该查询可以找到我最近的库存减少量并向我返回扣除额的总和。

我的表格保存了许多项目ID的日期和金额。从理论上讲,我要尝试为给定项目ID选择所有金额和日期,然后查找两天库存之间最近一次减少之间的差异。由于会跟踪多个项目,因此不能保证id列对于一组项目是连续的。

寻求解决方案的研究已经完全铺天盖地。似乎窗口函数可能是一个不错的尝试,但是我从未使用过它们,甚至还没有一个真正的起点概念。

虽然我可以轻松地返回金额并使用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之间,并且减少量是2019年5月10日的11。

1 个答案:

答案 0 :(得分:1)

在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;