Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Berechnen geometrisch verknüpfter Renditen in SQL SERVER 2008

Sie haben zwei Möglichkeiten, ein Produkt in SQL Server zu erhalten.

1. Mit Logarithmen und Exponenten simulieren:

SQL-Geige

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;

Dies nutzt Protokolle und Exponenten, um eine Produktberechnung zu simulieren. Weitere Informationen:Benutzerdefinierte Funktionen .

Das einzige Problem hier ist, dass es bei einer Rendite von <-100 % fehlschlägt. Wenn Sie diese nicht erwarten, ist das in Ordnung, andernfalls müssen Sie beliebige Werte <100 % bis -100 % festlegen.

Sie können diese tatsächliche Rendite dann verwenden, um bei Bedarf eine annualisierte Rendite zu erhalten.

2. Definieren Sie ein benutzerdefiniertes Aggregat mit CLR:

Siehe Online-Bücher .

Sie können eine benutzerdefinierte CLR-Funktion erstellen und diese dann mit einem Aggregat zur Verwendung in Ihren Abfragen verknüpfen. Dies ist mehr Arbeit und Sie müssen CLRs auf Ihrem Server aktivieren, aber sobald dies erledigt ist, können Sie es so oft wie nötig verwenden.