带有输入总和的顶行

时间:2017-08-02 10:19:00

标签: mysql sql stored-procedures

我有下面的表格,用户会给我一个产品的任何数量的输入(例如数量 - 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      |

1 个答案:

答案 0 :(得分: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只需选择您想要的行,一旦有累积总和。