mySchema:
create table Warehouse
(
ware_id int,
weight int unsigned,
added_date date
);
insert into Warehouse
values (56, 21, '2008-04-04'),
(42, 40, '2009-10-13'),
(10, 11, '2010-11-14'),
(22, 2, '2010-11-22'),
(19, 27, '2012-01-25'),
(80, 14, '2012-01-25'),
(21, 31, '2012-03-11'),
(52, 32, '2012-05-30'),
(49, 4, '2013-02-26'),
(77, 17, '2013-05-24'),
(22, 54, '2016-04-18'),
(40, 19, '2017-02-20');
我有一个仓库,里面存放着许多货物,而且有重量限制。
所有货物的总和必须小于或等于272。
如果一个新的软件想要增加和仓库容量是满的,我们必须删除最古老的产品,以便为新的一个腾出空间,这一过程将继续,直到仓库的自由空间等于或大于新的器皿重量。
我如何做一个简单的查询来返回所有需要删除的产品?
例如,如果新项的权重为100,则查询应返回如下内容:
| ware_id | weight | added_date |
|---------|--------|------------|
| 56 | 21 | 2008-04-04 |
| 42 | 40 | 2009-10-13 |
| 10 | 11 | 2010-11-14 |
| 22 | 2 | 2010-11-22 |
| 19 | 27 | 2012-01-25 |发布于 2019-11-23 21:21:22
如果您在MySQL 5.6中运行,您可以这样做:
SET @sum = 0;
SELECT ware_id, weight, added_date
FROM (
SELECT
ware_id,
weight,
added_date,
(@sum:=@sum + weight) AS sum_weights
FROM
Warehouse
ORDER BY added_date DESC
) as sumed_weights
WHERE sumed_weights.sum_weights > (272 - 100)其中100是新项目的重量。
https://stackoverflow.com/questions/59012212
复制相似问题