Rolling Sum SQL Server 2012之前版本



我有一个关于SQL Server 2012之前版本中的滚动和的问题。

正如你从下面的文本中看到的那样,我每月都有大量的资金流,我想计算滚动总额,以实现不同的时间范围(例如,对于1年,我想对前12个和滚动总额进行汇总。(

在2012年之后的SQL Server中,有一个带有"order by"的"partition"命令,用于管理此项工作。如果我使用的是2012年以前的版本呢?

希望一切都清楚,否则我会重新表述这个问题!

id;date;count period;datatype;Time_Horizon;1 month
abcd;31/01/2015;1.00;Money;1M;-3.817794537
abcd;28/02/2015;2.00;Money;1M;4.725421751
abcd;31/03/2015;3.00;Money;1M;0.999422223
abcd;30/04/2015;4.00;Money;1M;-3.785429484
abcd;31/05/2015;5.00;Money;1M;-0.037784528
abcd;30/06/2015;6.00;Money;1M;1.35447345
abcd;31/07/2015;7.00;Money;1M;-1.154258508
abcd;31/08/2015;8.00;Money;1M;-0.322592199
abcd;30/09/2015;9.00;Money;1M;-1.496497343
abcd;31/10/2015;10.00;Money;1M;-4.901709438
abcd;30/11/2015;11.00;Money;1M;4.275774672
abcd;31/12/2015;12.00;Money;1M;-8.743591429
abcd;31/01/2016;13.00;Money;1M;0.093734273
abcd;29/02/2016;14.00;Money;1M;-5.226279991
abcd;31/03/2016;15.00;Money;1M;-2.971203457
abcd;30/04/2016;16.00;Money;1M;-1.088491226
abcd;31/05/2016;17.00;Money;1M;-1.380297903
abcd;30/06/2016;18.00;Money;1M;-0.432389513
abcd;31/07/2016;19.00;Money;1M;-0.773134267
abcd;31/08/2016;20.00;Money;1M;-0.699732667
abcd;30/09/2016;21.00;Money;1M;-0.816940324
abcd;31/10/2016;22.00;Money;1M;-1.737192168
abcd;30/11/2016;23.00;Money;1M;-5.006184229
abcd;31/12/2016;24.00;Money;1M;-6.735075861
abcd;31/01/2017;25.00;Money;1M;-0.574752036
abcd;28/02/2017;26.00;Money;1M;-1.426153523
abcd;31/03/2017;27.00;Money;1M;-3.995159675
abcd;30/04/2017;28.00;Money;1M;-1.966250762
abcd;31/05/2017;29.00;Money;1M;-1.804032909
abcd;30/06/2017;30.00;Money;1M;-2.016144093
abcd;31/07/2017;31.00;Money;1M;-1.475106552
abcd;31/08/2017;32.00;Money;1M;-1.860843233
abcd;30/09/2017;33.00;Money;1M;-1.19544486
abcd;31/10/2017;34.00;Money;1M;-10.41490183
abcd;30/11/2017;35.00;Money;1M;-1.701649381
abcd;31/12/2017;36.00;Money;1M;-7.037158969
abcd;31/01/2018;37.00;Money;1M;-5.021293226
abcd;28/02/2018;38.00;Money;1M;-2.063987708
abcd;31/03/2018;39.00;Money;1M;-1.327867698
abcd;30/04/2018;40.00;Money;1M;-2.555916988
abcd;31/05/2018;41.00;Money;1M;-0.825325207
abcd;30/06/2018;42.00;Money;1M;-3.529128638
abcd;31/07/2018;43.00;Money;1M;-0.64903325
abcd;31/08/2018;44.00;Money;1M;0.755237218
abcd;30/09/2018;45.00;Money;1M;-1.645666712
abcd;31/10/2018;46.00;Money;1M;-2.654650057
abcd;30/11/2018;47.00;Money;1M;-1.083287292

在早期版本的SQL Server中,您可以使用apply。例如,对于12行滚动总和:

select t.*, t2.amount
from t cross apply
(select sum(t2.amount) as amount
from (select top (12) t2.*
from t t2
where t2.col1 = t.col1 and
t2.month <= t.month
) t2
) t2;

对于12个月的滚动总额:

select t.*, t2.amount
from t cross apply
(select sum(t2.amount) as amount
from t t2
where t2.col1 = t.col1 and
t2.month <= t.month and
t2.month > dateadd(month, -12, t.month)
) t2;

最新更新