Wählen Sie die laufende Summe aus, bis eine bestimmte Summe erreicht ist

Ich versuche, die ersten n Zeilen-ID-Werte aus der folgenden Tabellenvariablen auszuwählen, mit denen ich einer Summe (itemcount) von 200.000 nahe komme, ohne diese Schwelle zu überschreiten. Wenn ich dies manuell betrachte, würde ich nur die oberen 3 Reihen nehmen. Ich möchte keinen Cursor verwenden, es sei denn, es gibt keinen rein satzbasierten Weg.

Was ist ein guter satzbasierter Weg, um alle Rowid-Werte "summieren, während / bis" zu einer laufenden Summe von 200.000 zu kommen?

Ich habe mir "Running Totals" angeschauthttp://www.1keydata.com/sql/sql-running-totals.html Das schien jedoch nicht zu funktionieren, da die reale Tabelle etwa 500.000 Zeilen enthält.

Folgendes habe ich bisher versucht:

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

Verwenden von SQL Server 2008. Bei Bedarf wechsle ich zu 2012.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage