首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从前一行的相同列值中选择列值最近减少的行?

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

Stack Overflow用户
提问于 2019-06-07 06:50:42
回答 1查看 22关注 0票数 0

我有一组库存数据,其中数量以给定的速度增加。例如,库存每天增加10个单位。然而,有时会有库存减少,可能是任何数量。我需要一个查询,它可以找到我最近的库存减少,并返回给我该扣减的总和。

从理论上讲,我要做的是为给定的物品ID选择所有的金额和日期,然后找出最近两天库存减少之间的差异。由于跟踪多个项的事实,不能保证id列对于一组项是连续的。

寻找解决方案的研究已经完全势不可挡。似乎窗口函数可能是一个很好的尝试方法,但我从未使用过它们,甚至没有真正的概念从哪里开始。

虽然我可以很容易地返回金额并在PHP中进行计算,但我觉得在这里做的正确的事情是利用SQL,但我处理更复杂查询的经验有限。

代码语言:javascript
复制
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

考虑到上面的数据,最好能看到如下结果:

代码语言:javascript
复制
item id | date       | reduction
2         2019-05-10   11

这是因为最近的库存减少是在id 67和89之间,减少的金额是2019年5月10日的11。

EN

回答 1

Stack Overflow用户

发布于 2019-06-07 06:56:29

在MySQL 8+中,您可以使用lag()

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56485998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档