我有一组库存数据,其数量以给定的速率增加。例如,库存每天增加十个单位。但是,有时会减少任何数量的库存。我需要一个查询,该查询可以找到我最近的库存减少量并向我返回扣除额的总和。
我的表格保存了许多项目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。
答案 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;