Разделение результатов в запросе промежуточных итогов
Я ищу быстрый способ создания кумулятивных итогов в большом наборе данных 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). Тем не менее, мне нужно эффективно разделить по пользователям - дать мне совокупный итог по пользователям по месяцам.
Кто-нибудь знает способ расширения концепции множественных присваивающих переменных для решения этой проблемы или какие-либо другие идеи, кроме коррелированных подзапросов или курсоров?
Большое спасибо за любые советы.