首页 > 解决方案 > 在 SQL 中计算有限和?

问题描述

我试图找出一种在 SQL 中计算以下内容的方法:

公式

其中 r 和 W 分别是静态的 (0.2 , 0.4)。x 类似于年龄,并且从不超过 68。

我的数据库有 x、r 和 W 列,其中 x 对于每个观察值都不同。

我最初的想法是一个while循环,但我无法构建一个while循环,它的作用类似于:

select * , 0 as n

while n < 68 - (x + 1)
begin
    (POWER((1 + r) / (1 + W)) , n)
    set n = n + 1
end

from data

希望上面的伪代码说明了我正在尝试实现的内容。

提前致谢!

标签: sqlmathwhile-loopsumsql-server-2017

解决方案


不需要循环。你的总和(给定 r,w,x)是

(POWER( (1+r)/(1+w), 68-x)-1)/( (1+r)/(1+w) - 1)

除非

(1+r)/(1+w) == 1

在这种情况下,总和是 68-x

因为如果我们写

c = (1+r)/(1+w) and 
N = 68-x

然后

(c-1)*Sum{ 0<=n<N | pow(c,n)}
= c*Sum{ 0<=n<N | pow(c,n)} - Sum{ 0<=n<N | pow(c,n)}
= Sum{ 0<=n<N | pow( c, n+1)} - Sum{ 0<=n<N | pow(c,n)}
= Sum{ 1<=n<=N | pow( c, n)} - Sum{ 0<=n<N | pow(c,n)}
= pow( C, N) - 1 (as all the other terms cancel)

推荐阅读