Du har två alternativ för att få en produkt i SQL Server.
1. Simulera med loggar och exponenter:
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;
Detta utnyttjar loggar och exponenter för att simulera en produktberäkning. Mer information:Användardefinierade funktioner .
En fråga här är att det kommer att misslyckas för avkastning <-100%. Om du inte förväntar dig dessa är det bra, annars måste du ställa in alla värden <100 % till -100 %.
Du kan sedan använda denna faktiska avkastning för att få en årlig avkastning efter behov.
2. Definiera ett anpassat aggregat med CLR:
Se Böcker online .
Du kan skapa en anpassad CLR-funktion och sedan länka denna till ett aggregat för användning i dina frågor. Det här är mer arbete och du måste aktivera CLR på din server, men när det är klart kan du använda det så mycket som krävs.