找出一条记录满足sum(金额)刚好超过某个数,请教

afu45 2017-06-29 09:29:08
表tb如下,id为自增,想找出从第一条开始到哪一条记录 金额总计刚好超过100

id 金额
------- -----------
2 30
3 30
4 30
11 9
12 1
13 1
14 15
15 33
16 5
16 8
16 14
16 3
...全文
616 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
afu45 2017-06-29
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([id] int,[金额] int)
Insert #T
select 2,30 union all
select 3,30 union all
select 4,30 union all
select 11,9 union all
select 12,1 union all
select 13,1 union all
select 14,15 union all
select 15,33 union all
select 16,5 union all
select 17,8 union all
select 18,14 union all
select 19,3
Go
--测试数据结束
SELECT  MIN(id)
FROM    ( SELECT    b.Id ,
                    SUM(a.金额) AS 金额
          FROM      #T a
                    JOIN #T b ON b.id >= a.id
          GROUP BY  b.Id
          HAVING    SUM(a.金额) > 100
        ) t
从Id等于13开始大于100
感谢您的回复 可是我的数据有171281条,执行了一分多钟还没出结果,有没有效率更快一点的方法呀? 谢谢
acen_chen 2017-06-29
  • 打赏
  • 举报
回复
不好意思,搞错了,以为这是oracle版块
acen_chen 2017-06-29
  • 打赏
  • 举报
回复
SELECT min(id) FROM (SELECT id,sum(金额 ) OVER(ORDER BY id) sumamount FROM tb) t where t.sumamount > 100
二月十六 版主 2017-06-29
  • 打赏
  • 举报
回复 1
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[金额] int)
Insert #T
select 2,30 union all
select 3,30 union all
select 4,30 union all
select 11,9 union all
select 12,1 union all
select 13,1 union all
select 14,15 union all
select 15,33 union all
select 16,5 union all
select 17,8 union all
select 18,14 union all
select 19,3
Go
--测试数据结束
SELECT MIN(id)
FROM ( SELECT b.Id ,
SUM(a.金额) AS 金额
FROM #T a
JOIN #T b ON b.id >= a.id
GROUP BY b.Id
HAVING SUM(a.金额) > 100
) t

从Id等于13开始大于100

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧