sql >> Databáze >  >> RDS >> Sqlserver

Výpočet geometricky propojených výnosů v SQL SERVER 2008

Máte dvě možnosti, jak získat produkt v SQL Server.

1. Simulovat pomocí protokolů a exponentů:

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;

To využívá protokoly a exponenty k simulaci výpočtu produktu. Další informace:Uživatelsky definované funkce .

Jediným problémem je, že selže při návratu <-100 %. Pokud to neočekáváte, je to v pořádku, jinak budete muset nastavit jakékoli hodnoty <100 % až -100 %.

Tento skutečný výnos pak můžete použít k získání ročního výnosu podle potřeby.

2. Definujte vlastní agregát pomocí CLR:

Viz Knihy online .

Můžete vytvořit vlastní funkci CLR a poté ji propojit jako agregát pro použití ve vašich dotazech. To je více práce a budete muset povolit CLR na svém serveru, ale jakmile to uděláte, můžete jej používat tolik, kolik je potřeba.




  1. Nastavte připojení PDO bez hesla

  2. Výběr všech dat z tabulky v rámci časového období a včetně 1 řádku na prázdné datum

  3. Jsou hranaté závorky platné v dotazu SQL?

  4. postgres dotaz s IN je velmi pomalý