2

幾何学的にリンクリターンを計算する

record2 * record1をどのように乗算しますか?

希望は、実際のレートと無効化されたレートの値を返すことです

与えられたテーブルunterval:

   EndDate    PctReturn
-------------------------------
1. 05/31/06   -0.2271835
2. 06/30/06   -0.1095986
3. 07/31/06    0.6984908
4. 08/31/06    1.4865360
5. 09/30/06    0.8938896

目的の出力は次のようになります。

EndDate    PctReturn    Percentage   UnitReturn         
05/31/06   -0.2271835   -0.002272    0.997728               
06/30/06   -0.1095986   -0.001096    0.996634669                
07/31/06    0.6984908    0.006985    1.00359607             
08/31/06    1.4865360    0.014865    1.018514887                
09/30/06    0.8938896    0.008939    1.027619286


Percentage = PctReturn/100                          

UnitReturn  (1 + S1) x (1 + S2) x ... (1 + Sn) - 1                      

必要な値の集計:

Actual Rate 2.761928596             
Annulized   6.757253223

価値の集計に関する数学:

 Actual Rate    1.027619    1.027619-1  =   0.027619    * 100 = 2.761928596

 Annulized Rate 6.757253    (ActualRate^(12/number of intervals)-1)*100

 Number of intervals in Example = 5

レコードまたは間隔は5つだけです

selectステートメントで合計を利用しようとしましたが、これでは、record2にrecord1を掛けてリターンをリンクすることはできませんでした。while関数を使用すると、レコードごとにステップして、unitreturnの値を乗算できると思いました。SQLの初心者レベルでは、助けを求めています。

4

1 に答える 1

4

SQLServerで製品を入手するには2つのオプションがあります。

1.ログと指数を使用してシミュレートします。

SQLフィドル

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;

これは、ログと指数を活用して製品の計算をシミュレートします。詳細:ユーザー定義関数

ここでの1つの問題は、リターンが-100%未満の場合に失敗することです。これらを期待しない場合は問題ありません。そうでない場合は、100%未満から-100%までの値を設定する必要があります。

次に、この実際の収益を使用して、必要に応じて年間収益を取得できます。

2.CLRを使用してカスタム集計を定義します。

BooksOnlineを参照してください。

CLRカスタム関数を作成し、これを集計にリンクしてクエリで使用できます。これはより多くの作業であり、サーバーでCLRを有効にする必要がありますが、一度有効にすると、必要なだけ使用できるようになります。

于 2013-01-26T21:16:33.053 に答える