Имате две опции за получаване на продукт в SQL Server.
1. Симулирайте с помощта на дневници и експоненти:
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;
Това използва регистрационни файлове и експоненти за симулиране на изчисление на продукт. Повече информация:Потребителски дефинирани функции .
Единственият проблем тук е, че ще се провали за възвръщаемост <-100%. Ако не очаквате такива, всичко е наред, в противен случай ще трябва да зададете стойности <100% до -100%.
След това можете да използвате тази действителна възвръщаемост, за да получите годишна възвръщаемост според изискванията.
2. Дефинирайте персонализиран агрегат с CLR:
Вижте Книги онлайн .
Можете да създадете CLR персонализирана функция и след това да свържете това като агрегат за използване във вашите заявки. Това е повече работа и ще трябва да активирате CLR на сървъра си, но след като това стане, можете да го използвате толкова, колкото е необходимо.