首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询来获取行,直到列之和等于某个值为止。

SQL查询来获取行,直到列之和等于某个值为止。
EN

Stack Overflow用户
提问于 2019-11-23 20:59:17
回答 1查看 314关注 0票数 1

mySchema:

代码语言:javascript
复制
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,则查询应返回如下内容:

代码语言:javascript
复制
| 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 |

SQL Fiddle

EN

回答 1

Stack Overflow用户

发布于 2019-11-23 21:21:22

如果您在MySQL 5.6中运行,您可以这样做:

代码语言:javascript
复制
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是新项目的重量。

SQLFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59012212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档