我有一组库存数据,其中数量以给定的速度增加。例如,库存每天增加10个单位。然而,有时会有库存减少,可能是任何数量。我需要一个查询,它可以找到我最近的库存减少,并返回给我该扣减的总和。
从理论上讲,我要做的是为给定的物品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这是因为最近的库存减少是在id 67和89之间,减少的金额是2019年5月10日的11。
发布于 2019-06-07 06:56:29
在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;https://stackoverflow.com/questions/56485998
复制相似问题