Je hebt twee opties om een product in SQL Server te krijgen.
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;
Dit maakt gebruik van logs en exponenten om een productberekening te simuleren. Meer info:Door gebruiker gedefinieerde functies .
Het enige probleem hier is dat het zal mislukken voor rendement <-100%. Als u deze niet verwacht, is dat prima, anders moet u waarden instellen van <100% tot -100%.
U kunt dit werkelijke rendement vervolgens gebruiken om desgewenst een jaarlijks rendement te krijgen.
Zie Online boeken .
U kunt een aangepaste CLR-functie maken en deze vervolgens koppelen aan een aggregaat voor gebruik in uw query's. Dit is meer werk en je zult CLR's op je server moeten inschakelen, maar als het eenmaal klaar is, kun je het zo vaak gebruiken als nodig is.