sql >> Base de Datos >  >> RDS >> Sqlserver

Cálculo de rendimientos vinculados geométricamente en SQL SERVER 2008

Tiene dos opciones para obtener un producto en SQL Server.

1. Simula usando logaritmos y exponentes:

SQL Fiddle

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;

Esto aprovecha logaritmos y exponentes para simular un cálculo de producto. Más información:Funciones definidas por el usuario .

El único problema aquí es que fallará para el retorno <-100%. Si no espera esto, está bien; de lo contrario, deberá establecer cualquier valor <100 % a -100 %.

Luego puede usar este rendimiento real para obtener un rendimiento anualizado según sea necesario.

2. Defina un agregado personalizado con CLR:

Consulte Libros en línea .

Puede crear una función personalizada de CLR y luego vincularla como un agregado para usarla en sus consultas. Esto es más trabajo y tendrá que habilitar los CLR en su servidor, pero una vez que lo haya hecho, podrá usarlo tanto como sea necesario.