Du har to muligheder for at få et produkt i SQL Server.
1. Simuler ved hjælp af logfiler og eksponenter:
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;
Dette udnytter logfiler og eksponenter til at simulere en produktberegning. Mere info:Brugerdefinerede funktioner .
Det ene problem her er, at det vil mislykkes for afkast <-100%. Hvis du ikke forventer disse, er det fint, ellers bliver du nødt til at indstille alle værdier <100 % til -100 %.
Du kan derefter bruge dette faktiske afkast til at få et årligt afkast efter behov.
2. Definer et tilpasset aggregat med CLR:
Se Bøger online .
Du kan oprette en brugerdefineret CLR-funktion og derefter linke denne til et aggregat til brug i dine forespørgsler. Dette er mere arbejde, og du bliver nødt til at aktivere CLR'er på din server, men når det først er gjort, kan du bruge det så meget som nødvendigt.