Представьте следующую таблицу (называемую TestTable):
id     somedate    somevalue
--     --------    ---------
45     01/Jan/09   3
23     08/Jan/09   5
12     02/Feb/09   0
77     14/Feb/09   7
39     20/Feb/09   34
33     02/Mar/09   6
Мне нужен запрос, который возвращает текущее общее количество в порядке даты, например:
id     somedate    somevalue  runningtotal
--     --------    ---------  ------------
45     01/Jan/09   3          3
23     08/Jan/09   5          8
12     02/Feb/09   0          8
77     14/Feb/09   7          15  
39     20/Feb/09   34         49
33     02/Mar/09   6          55
Я знаю, что различные способы выполнения этого в SQL Server 2000/2005/2008.
Мне особенно интересен такой метод, который использует трюк агрегирующего набора:
INSERT INTO @AnotherTbl(id, somedate, somevalue, runningtotal) 
   SELECT id, somedate, somevalue, null
   FROM TestTable
   ORDER BY somedate
DECLARE @RunningTotal int
SET @RunningTotal = 0
UPDATE @AnotherTbl
SET @RunningTotal = runningtotal = @RunningTotal + somevalue
FROM @AnotherTbl
... это очень эффективно, но я слышал, что есть проблемы вокруг этого, потому что вы не можете гарантировать, что оператор UPDATE будет обрабатывать строки в правильном порядке. Возможно, мы сможем получить некоторые окончательные ответы на эту проблему.
Но, может быть, есть другие способы, которые могут предложить люди?
edit: Теперь с SqlFiddle с настройкой и примером "трюк обновления" выше