我有一张看起来像这样的桌子
id remaining expiry_date
1 200 2019-11-15
2 10 2019-11-23
3 10 2019-11-16
4 10 2019-11-16
5 7 2019-11-16
我想获取运行总计215的结果,这些结果按expiry_date
的顺序按ascending
排序。
到目前为止我能实现什么?
SELECT *,@sum := (@sum + remaining) AS csum
FROM tickets
JOIN (SELECT @sum := 0) r
WHERE @sum < 215
ORDER BY id;
此查询返回以下正确的结果。
id remaining expiry_date csum
1 200 2019-11-15 200
2 10 2019-11-23 210
3 10 2019-11-16 220
但是当我尝试使用expiry_date
对其进行排序时,它将返回所有记录。
SELECT *,@sum := (@sum + remaining) AS csum
FROM tickets
JOIN (SELECT @sum := 0) r
WHERE @sum < 215
ORDER BY expiry_date;
结果:
id remaining expiry_date csum
1 200 2019-11-15 200
3 10 2019-11-16 210
4 10 2019-11-16 220
5 7 2019-11-16 227
2 10 2019-11-23 237
排序是正确的,但结果远远超出了我的需求。
我想要的
我想返回以下结果。
id remaining expiry_date csum
1 200 2019-11-15 200
3 10 2019-11-16 210
4 10 2019-11-16 220
此外,数字 215 可以动态更改,因此返回的行数可以根据该数字而变化。如何更改查询以实现此目的?
修改
我很抱歉,不清楚我对结果集中的实际需求。请让我澄清一下此编辑。我不希望总运行记录少于给定数量的记录。我想要记录,直到总和等于或超过给定的数量。