Разделение результатов в запросе промежуточных итогов

Я ищу быстрый способ создания кумулятивных итогов в большом наборе данных SQL Server 2008, который разделен по определенному столбцу, возможно, с помощьюmultiple assignment variable solution, В качестве очень простого примера я хотел бы создать "cumulative_total" столбец ниже:

user_id | month | total | cumulative_total

1       | 1     | 2.0   | 2.0
1       | 2     | 1.0   | 3.0
1       | 3     | 3.5   | 8.5

2       | 1     | 0.5   | 0.5
2       | 2     | 1.5   | 2.0
2       | 3     | 2.0   | 4.0

Мы традиционно делали это с помощью коррелированных подзапросов, но при больших объемах данных (более 200 000 строк и нескольких различных категорий промежуточного итога) это не дает нам идеальной производительности.

Недавно я прочитал об использовании нескольких переменных присваивания для кумулятивного суммирования здесь:

http://sqlblog.com/blogs/paul_nielsen/archive/2007/12/06/cumulative-totals-screencast.aspx

В примере из этого блога решение для кумулятивных переменных выглядит следующим образом:

UPDATE my_table
SET @CumulativeTotal=cumulative_total=@CumulativeTotal+ISNULL(total, 0)

Это решение кажется чрезвычайно быстрым для суммирования для одного пользователя в приведенном выше примере (пользователь 1 или пользователь 2). Тем не менее, мне нужно эффективно разделить по пользователям - дать мне совокупный итог по пользователям по месяцам.

Кто-нибудь знает способ расширения концепции множественных присваивающих переменных для решения этой проблемы или какие-либо другие идеи, кроме коррелированных подзапросов или курсоров?

Большое спасибо за любые советы.

Ответы на вопрос(2)

Ваш ответ на вопрос