Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从上一行的相同列值中选择列值最近减少的行?_Mysql_Sql - Fatal编程技术网

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

Mysql 如何从上一行的相同列值中选择列值最近减少的行?,mysql,sql,Mysql,Sql,我有一组库存数据,其中金额以给定的速率增加。例如,库存每天增加10个单位。然而,不时会有任何数量的库存减少。我需要一个查询,可以找到我最近的库存减少,并返回给我的总和扣除 我的表格包含许多项目id的日期和金额。理论上,我试图做的是为给定的项目ID选择所有金额和日期,然后找出两天库存之间最近减少的差异。由于跟踪了多个项目,因此无法保证一组项目的id列是连续的 为了找到解决办法而进行的研究已经完全铺天盖地。看起来窗口函数可能是一个很好的尝试途径,但我从未使用过它们,甚至不知道从哪里开始 虽然我可以很

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

我的表格包含许多项目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

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

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