【发布时间】:2020-01-31 16:17:38
【问题描述】:
考虑我在表中有以下行
| id | user_id | amount | date |
------------------------------------------------
| 1 | 1 | 100 | 2019-09-30 |
------------------------------------------------
| 2 | 2 | 100 | 2019-09-30 |
------------------------------------------------
| 3 | 1 | 100 | 2019-09-30 |
------------------------------------------------
| 4 | 3 | 100 | 2019-10-01 |
------------------------------------------------
| 5 | 1 | 75 | 2019-10-01 |
------------------------------------------------
| 6 | 3 | 100 | 2019-10-01 |
------------------------------------------------
| 7 | 1 | 35 | 2019-10-01 |
------------------------------------------------
我正在尝试找到一种方法来获取带有user_id = 1 的所有行,其中sum(amount) < 300 和date <= '2019-10-01'。
我想要做的是只处理满足某个阈值总和的记录。我不太确定从哪里开始。
预期结果
| id | user_id | amount | date |
------------------------------------------------
| 1 | 1 | 100 | 2019-09-30 |
------------------------------------------------
| 3 | 1 | 100 | 2019-09-30 |
------------------------------------------------
| 5 | 1 | 75 | 2019-10-01 |
------------------------------------------------
这是我目前尝试过的
SELECT id, SUM(amount) as total_sum
FROM table
WHERE date <= '2019-10-01' AND user_id = 1
ORDER BY date ASC
HAVING total_sum <= 300
根据上述查询,我没有得到所需的输出。
当前使用的 MySQL 版本:5.7.25
我确实看过这个问题MySQL select records with sum greater than threshold 假设他们正在尝试做同样的事情,但这不是我正在看的
【问题讨论】:
-
在您的预期输出中,您将获得对应于 10 月 1 日的行,但您的条件是日期 date < '2019-09-31' - 没有9月31日这样的事情。请修复问题声明。另外,您的 MySQL 服务器版本是什么?运行
SELECT Version(); -
@MadhurBhaiya,感谢您的关注。我确实向该数据添加了更多行,但错过了更新问题陈述。我也添加了版本。
-
谢谢,我去看看。
标签: mysql sum mariadb cumulative-sum mysql-5.7