首页 > 解决方案 > 如何获取单个整数/浮点列的总和达到某个值的行

问题描述

我有一张桌子。它具有以下结构

货物接收项目

我正在尝试获取具有以下条件的行

所以例如我有以下数据

+----+---------+----------+------------+
| id | item_id | quantity | created_at |
+----+---------+----------+------------+
|  1 |       2 |       11 | 2019-10-10 |
|  2 |       3 |      110 | 2019-10-11 |
|  3 |       2 |       20 | 2019-11-09 |
|  4 |       2 |        5 | 2019-11-10 |
|  5 |       2 |        1 | 2019-11-11 |
+----+---------+----------+------------+

我尝试了以下查询:

SET @sum:= 0;
SELECT   item_id, created_at, (@sum:= @sum + quantity) AS SUM, quantity 
FROM     goods_receiving_items
WHERE    item_id = 2 AND @sum<= 6
ORDER BY created_at DESC

如果我不使用ORDER BY,那么查询会给我 ID '1'。但如果我使用ORDER BY它将返回所有带有item_id = 2.

应按此顺序仅返回 ID '5' 和 '4'

我似乎无法解决这个问题,这ORDER BY对我的任务至关重要。任何帮助,将不胜感激

标签: mysqlmysql-variables

解决方案


您应该在结果集上使用 order by 您可以使用子查询来执行此操作

  SET @sum:= 0;

  select t.* 
  from t (
    SELECT item_id
        , created_at
        , (@sum:= @sum + quantity) as sum
        , quantity 
    FROM goods_receiving_items
    WHERE item_id = 2 AND @sum<= 6
  ) t
  ORDER BY created_at DESC

推荐阅读