Selecione o total em execução até que a SUM específica seja atingida
Eu estou tentando selecionar os primeiros n valores de rowid da variável de tabela a seguir que me levará tão perto de uma soma (itemcount) de 200.000 sem cruzar esse limiar. Se eu estivesse olhando isso manualmente, eu pegaria apenas as 3 primeiras linhas. Eu não quero usar um cursor a menos que não haja uma maneira baseada em um conjunto puro.
O que é uma boa maneira baseada em conjunto para obter todos os valores de rowid "soma enquanto / até" Eu chego a um total de 200.000?
Eu olhei para "executando totais" emhttp://www.1keydata.com/sql/sql-running-totals.html mas isso não parecia funcionar, porque a tabela real tem cerca de 500 mil linhas.
Aqui está o que eu tentei até agora:
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
Usando o SQL Server 2008. Vou mudar para 2012, se necessário.