sql >> Databasteknik >  >> RDS >> Sqlserver

Beräkna geometriskt länkade returer i SQL SERVER 2008

Du har två alternativ för att få en produkt i SQL Server.

1. Simulera med loggar och exponenter:

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;

Detta utnyttjar loggar och exponenter för att simulera en produktberäkning. Mer information:Användardefinierade funktioner .

En fråga här är att det kommer att misslyckas för avkastning <-100%. Om du inte förväntar dig dessa är det bra, annars måste du ställa in alla värden <100 % till -100 %.

Du kan sedan använda denna faktiska avkastning för att få en årlig avkastning efter behov.

2. Definiera ett anpassat aggregat med CLR:

Se Böcker online .

Du kan skapa en anpassad CLR-funktion och sedan länka denna till ett aggregat för användning i dina frågor. Det här är mer arbete och du måste aktivera CLR på din server, men när det är klart kan du använda det så mycket som krävs.




  1. Design för att representera anställdas in- och utcheckning

  2. 5 steg för att bygga en marknadsföringsdatabas

  3. MySQL okänd kolumn i ON-klausul

  4. I Postgresql, tvinga unik på kombination av två kolumner