查找数据表中某个字段相加的和刚好大于或等于给定值时所包含的记录

这是数据表
查找数据表中某个字段相加的和刚好大于或等于给定值时所包含的记录

需求:
需要优先从end_time 最小的开始查找匹配,开始查找can_num 字段垒加 大于等于100的所有记录,
如上图所示,我需要得到的结果应该是id为 [1,2,9,10] = 186 刚好大于100的前4条记录!

查找数据表中某个字段相加的和刚好大于或等于给定值时所包含的记录

有大神指点下,这个sql该如何写么(end_time 时间不唯一,有大量重复)

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
SET @one_id = 0;
SET @two_id = 0;
SET @three_id = 0;
SET @max_id = 0;

SELECT
    *,
    ( @max_id := max( one_id ) + 1 ) AS max_id 
FROM
    ( SELECT ( @one_id := @one_id + 1 ) AS one_id, t.* FROM test t ORDER BY t.time ASC ) t 
WHERE
    (
    SELECT
        SUM( t1.num ) AS num 
    FROM
        ( SELECT ( @two_id := @two_id + 1 ) AS two_id, t.* FROM test t ORDER BY t.time ASC ) t1 
    WHERE
        t1.two_id <= t.one_id 
    ) <= 100 
GROUP BY
    one_id UNION ALL
    (
    SELECT
        *,
        id + 1 AS max_id 
    FROM
        ( SELECT ( @three_id := @three_id + 1 ) AS one_id, t.* FROM test t ORDER BY t.time ASC ) t 
    WHERE
    one_id = @max_id 
    )
2年前 评论
xh_dream (楼主) 2年前
讨论数量: 4
SELECT
    * 
FROM
    table t
WHERE
    ( SELECT SUM( can_num) can_num FROM table t1 WHERE t1.id <= t.id ) <= 100
2年前 评论

@pyTzy 不好意思,我前面表述没完整,拿你的过去 如果是 ID主键为条件是对的,谢谢,现在如果我是按end_time为基准的话,该怎么实现呢,拜谢!上面问题我已经更新,麻烦帮忙看下

2年前 评论
dashing 2年前
xh_dream (作者) (楼主) 2年前
dashing 2年前
xh_dream (作者) (楼主) 2年前
dashing 2年前
xh_dream (作者) (楼主) 2年前

查找 can_num 字段垒加 大于等于 100 的所有记录,后面数据加起来也是大于等于100啊,应该是刚好临界,超过100就不查询才对吧

2年前 评论
xh_dream (楼主) 2年前
xh_dream (楼主) 2年前
xh_dream (楼主) 2年前
zsqlll (作者) 2年前
xh_dream (楼主) 2年前
SET @one_id = 0;
SET @two_id = 0;
SET @three_id = 0;
SET @max_id = 0;

SELECT
    *,
    ( @max_id := max( one_id ) + 1 ) AS max_id 
FROM
    ( SELECT ( @one_id := @one_id + 1 ) AS one_id, t.* FROM test t ORDER BY t.time ASC ) t 
WHERE
    (
    SELECT
        SUM( t1.num ) AS num 
    FROM
        ( SELECT ( @two_id := @two_id + 1 ) AS two_id, t.* FROM test t ORDER BY t.time ASC ) t1 
    WHERE
        t1.two_id <= t.one_id 
    ) <= 100 
GROUP BY
    one_id UNION ALL
    (
    SELECT
        *,
        id + 1 AS max_id 
    FROM
        ( SELECT ( @three_id := @three_id + 1 ) AS one_id, t.* FROM test t ORDER BY t.time ASC ) t 
    WHERE
    one_id = @max_id 
    )
2年前 评论
xh_dream (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!