Masz dwie możliwości uzyskania produktu w SQL Server.
1. Symuluj za pomocą logów i wykładników:
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;
Wykorzystuje to logi i wykładniki do symulacji obliczeń produktu. Więcej informacji:Funkcje zdefiniowane przez użytkownika .
Jedynym problemem jest to, że nie powiedzie się w przypadku zwrotu <-100%. Jeśli się ich nie spodziewasz, wszystko jest w porządku, w przeciwnym razie musisz ustawić dowolne wartości od <100% do -100%.
Możesz następnie użyć tego rzeczywistego zwrotu, aby uzyskać roczny zwrot zgodnie z wymaganiami.
2. Zdefiniuj agregację niestandardową za pomocą CLR:
Zobacz Książki online .
Możesz utworzyć niestandardową funkcję CLR, a następnie połączyć ją z agregatem do użycia w zapytaniach. To jest więcej pracy i będziesz musiał włączyć CLR na swoim serwerze, ale gdy to zrobisz, możesz z niego korzystać tyle, ile jest to wymagane.