【发布时间】:2021-08-27 07:49:51
【问题描述】:
我在数据库中针对每个硬件和盒子定义了盒子数量
CREATE TEMPORARY TABLE IF NOT EXISTS temp_Boxes (HWID int, BoxId int, Quantity int);
INSERT temp_Boxes VALUES
-- (5, 1, 1),
-- (5, 1, 2),
(5, 1, 3),
(5, 2, 6),
-- (8, 1, 0),
(8, 2, 1);
现在我将有一个带有hardwareId 和quantity 的参数,需要容纳在那个框中让我们说:
set @hardwareId = 5;
set @quantity = 9; -- quantity could be any whole number
所以我在这里感到困惑,如何使用简单的 SQL 查询来实现以下结果,该查询将返回此结果:
(5, 1, 3),
(5, 2, 6)
到目前为止我尝试过的或者可以说我脑海中的预置代码就像是在数量上运行循环,而在内部循环中运行在盒子计数上的迭代
WHILE @quantity > 0 DO
SELECT
*,
@quantity quanvalbefore ,
Case when qty >= @quantity Then @quantity ELSE @quantity := @quantity-qty END remain,
@quantity quanvalAfter
FROM temp_Boxes
where HWID = @hardwareId
;
END WHILE;
对此问题的任何建议或解决方案都会有所帮助,因为我无法弄清楚我将如何处理剩余的 3 个项目,其中 6 个已分配
【问题讨论】:
-
我认为您可能需要诉诸蛮力。
-
这听起来像是一个装箱问题,基本上需要蛮力方法来获得最佳解决方案。例如,为什么不能在 1/2/6 之前给出答案?
-
@asad 每个 HWID 的最大行数是多少?如果它非常小,比如 8-10,那么蛮力是可能的/有点实用。
-
@SalmanA 它可以是任何数字,但可以猜测它不会超过 10