Hai due opzioni per ottenere un prodotto in SQL Server.
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;
Questo sfrutta log ed esponenti per simulare il calcolo di un prodotto. Ulteriori informazioni:Funzioni definite dall'utente .
L'unico problema qui è che non riuscirà a restituire <-100%. Se non te li aspetti va bene, altrimenti dovrai impostare tutti i valori da <100% a -100%.
Puoi quindi utilizzare questo rendimento effettivo per ottenere un rendimento annualizzato come richiesto.
Vedi Libri in linea .
È possibile creare una funzione personalizzata CLR e quindi collegarla a un aggregato da utilizzare nelle query. Questo è più lavoro e dovrai abilitare i CLR sul tuo server, ma una volta terminato, potrai usarlo quanto necessario.