我正在尝试从下表变量中选择前 n 个 rowid 值,这将使我在不超过该阈值的情况下接近 200,000 的 sum(itemcount)。如果我手动查看这个,我只会选择前 3 行。除非没有基于纯集的方式,否则我不想使用游标。
什么是基于集合的好方法来获取所有 rowid 值“总和而/直到”我达到 200,000 的运行总数?
我查看了http://www.1keydata.com/sql/sql-running-totals.html上的“运行总计”,但这似乎不会奏效,因为真正的表有大约 500k 行。
这是我到目前为止所尝试的:
declare @agestuff table ( rowid int primary key , itemcount int , itemage datetime )
insert into @agestuff values ( 1 , 175000 , '2013-01-24 17:21:40' )
insert into @agestuff values ( 2 , 300 , '2013-01-24 17:22:11' )
insert into @agestuff values ( 3 , 10000 , '2013-01-24 17:22:11' )
insert into @agestuff values ( 4 , 19000 , '2013-01-24 17:22:19' )
insert into @agestuff values ( 5 , 16000 , '2013-01-24 17:22:22' )
insert into @agestuff values ( 6 , 400 , '2013-01-24 17:23:06' )
insert into @agestuff values ( 7 , 25000 , '2013-01-24 17:23:06' )
select sum(itemcount) from @agestuff -- 245700 which is too many
select sum(itemcount) from @agestuff
where rowid in (1,2,3) -- 185300 which gets me as close as possible
使用 SQL Server 2008。如有必要,我将切换到 2012。