2017-08-02 58 views
0

我有类似下面的表格,其中用户会给我一个输入的任何数量与产品(例如数量 - 5000和产品 - P001),那么我不得不给他返回行明智的数据..我的意思是在他的批数量将履行它应该是明智的日期..第一结束顶部行与输入总和

Batch  |Product | Date    | Quantity | 
------------+---------+--------------------+-----------+ 
D001  |P001  | 1Jul2017   | 1000  | 
D002  |P001  | 10Jul2017   | 2000  | 
D003  |P001  | 15Jul2017   | 3000  | 
D004  |P001  | 18Jul2017   | 5500  | 
D005  |P002  | 12Jul2017   | 3000  | 
D006  |P002  | 14Jul2017   | 2000  | 
D007  |P002  | 15Jul2017   | 4000  | 

以及最终输出应该是这样的。

Batch  |Product | Date    | Quantity | 
------------+---------+--------------------+-----------+ 
D001  |P001  | 1Jul2017   | 1000  | 
D002  |P001  | 10Jul2017   | 2000  | 
D003  |P001  | 15Jul2017   | 2000  | 
+0

到目前为止您尝试过什么? – SandPiper

+0

我已经尝试了很多东西,但是所有的废物都在这里发布 –

+0

为什么Department在结果集中总是D001? – CiccioRocca

回答

0

你似乎想要一个累计和。我们假设你想要的数量是@quantity。然后 。 。 。

select t.*, 
     (case when cume_q < @quantity then quantity 
      else cume_q - @quantity 
     end) as used_quantity 
from (select t.*, (@q := @q + t.quantity) as cume_q 
     from t cross join 
      (select @q := 0) params 
     where product = @product 
     order by date 
    ) t 
where (cume_q - quantity) < @quantity; 

子查询计算累计和。你可以单独运行它,看看发生了什么。如果您想了解MySQL中的变量,请参考文档。

外部where只是选择你想要的行,一旦你有累计和。

+0

不明白发生了什么事情。请你让我明白 –