计算几何链接返回
如何将record2 * record1相乘?
愿望是返回实际利率和废止利率的值
给定表unterval:
EndDate PctReturn ------------------------------- 1. 05/31/06 -0.2271835 2. 06/30/06 -0.1095986 3. 07/31/06 0.6984908 4. 08/31/06 1.4865360 5. 09/30/06 0.8938896
所需的输出应如下所示:
EndDate PctReturn Percentage UnitReturn 05/31/06 -0.2271835 -0.002272 0.997728 06/30/06 -0.1095986 -0.001096 0.996634669 07/31/06 0.6984908 0.006985 1.00359607 08/31/06 1.4865360 0.014865 1.018514887 09/30/06 0.8938896 0.008939 1.027619286 Percentage = PctReturn/100 UnitReturn (1 + S1) x (1 + S2) x ... (1 + Sn) - 1
汇总所需的值:
Actual Rate 2.761928596 Annulized 6.757253223
关于合计值的数学:
Actual Rate 1.027619 1.027619-1 = 0.027619 * 100 = 2.761928596 Annulized Rate 6.757253 (ActualRate^(12/number of intervals)-1)*100 Number of intervals in Example = 5
只有5条记录或间隔
我确实尝试在select语句中利用总和,但这不允许将record2与record1相乘以链接返回。我认为利用while函数将允许逐条记录地逐步增加unitreturn的值。我在SQL的入门级水平上寻求帮助。
在SQL Server中获得产品有两种选择。
1.使用日志和指数进行模拟:
sqlfiddle
create table returns ( returnDate date, returnValue float ) insert into returns values('05/31/06', -0.002271835) insert into returns values('06/30/06', -0.001095986) insert into returns values('07/31/06', 0.006984908) insert into returns values('08/31/06', 0.014865360) insert into returns values('09/30/06', 0.008938896) select totalReturn = power ( cast(10.0 as float) , sum(log10(returnValue + 1.0)) ) - 1 from returns; with tr as ( select totalReturn = power ( cast(10.0 as float) , sum(log10(returnValue + 1.0)) ) - 1 , months = cast(count(1) as float) from returns ) select annualized = power(totalReturn + 1, (1.0 / (months / 12.0))) - 1 from tr;
这利用日志和指数来模拟产品计算。更多信息:用户定义的函数。
这里的一个问题是返回<-100%失败。如果您不希望这些设置没问题,那么您需要将所有<100%到-100%的值设置。
然后,您可以根据需要使用此实际收益来获得年度收益。
2.使用CLR定义自定义聚合:
参见在线书籍。
您可以创建一个CLR自定义函数,然后将其链接在一起以在查询中使用。这是更多的工作,您必须在服务器上启用CLR,但是一旦完成,就可以根据需要使用它。