sql >> Database >  >> RDS >> Sqlserver

Geometrisch gekoppelde resultaten berekenen in SQL SERVER 2008

Je hebt twee opties om een ​​product in SQL Server te krijgen.

1. Simuleer met logboeken en exponenten:

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;

Dit maakt gebruik van logs en exponenten om een ​​productberekening te simuleren. Meer info:Door gebruiker gedefinieerde functies .

Het enige probleem hier is dat het zal mislukken voor rendement <-100%. Als u deze niet verwacht, is dat prima, anders moet u waarden instellen van <100% tot -100%.

U kunt dit werkelijke rendement vervolgens gebruiken om desgewenst een jaarlijks rendement te krijgen.

2. Definieer een aangepast aggregaat met CLR:

Zie Online boeken .

U kunt een aangepaste CLR-functie maken en deze vervolgens koppelen aan een aggregaat voor gebruik in uw query's. Dit is meer werk en je zult CLR's op je server moeten inschakelen, maar als het eenmaal klaar is, kun je het zo vaak gebruiken als nodig is.




  1. Kan geen verbinding maken met de GlassFish-database met Netbeans?

  2. Alias ​​voor GROUP BY-clausule?

  3. Keuze opslagmotor:Aria

  4. Hoe een enkele SQL Server-verbindingsinstantie open te houden voor meerdere aanvragen in C#?