2017-05-10 11 views
0

前年の値に翌年の値を乗算したいと思います。前の年の値に翌年の値を掛けます。

これは私が2009の割合を2008年の割合を乗算し、したい私のテーブルのデータ

Drop table #Index 
Create table #Index 
(
    ID int , 
YearOfMortgrage Smallint, 
Percentage Numeric (10,5) 

) 

Insert into #Index values (1 , 2008 ,1.01000 ) 
Insert into #Index values (2 , 2009 ,1.00125 ) 
Insert into #Index values (3 , 2010 ,1.00200 ) 
Insert into #Index values (4 , 2011 ,1.00850 ) 
Insert into #Index values (5 , 2012 ,1.01400 ) 
Insert into #Index values (6 , 2013 ,1.00900 ) 
Insert into #Index values (7 , 2014 ,1.00450 ) 
Insert into #Index values (8, 2015 ,1.00900 ) 
Insert into #Index values (9 , 2016 ,1.00600 ) 
Insert into #Index values (1, 2017 ,1.00700 ) 

です。 このような1.01000 * 1.00125 * 1.00200 * 1.00850など。

私は遅延と鉛を試して、それは動作していないようです。私は先に無制限の関数を使用することができましたが、それはagregationでしか使用できません。

すべてのヘルプはあなたが累積合計をしたい、あなたの時間

+0

「機能していない」とはどういう意味ですか?すでに試したコードを投稿できますか? –

+0

私は、tと(数値(10,5)、CurrentIndex * PreviousIndex)を変換し、これは個別IDをsolutionSelect LAG(割合( 選択ID、YearOfMortgrage、CurrentIndex、割合としてパーセンテージから、 割合 をYearOfMortgrageを試してみました、 1,1))YearOfMortgrage BY ORDER(OVER #INDEX からPreviousIndex )ASいつものようにYearOfMortgrage ASC – Ilyas

答えて

4

に感謝を理解されるであろう。値がすべて0より大きいと仮定すると、算術演算を使用できます。

select i.*, 
     exp(sum(log(Percentage)) over (order by YearOfMortgrage)) as running_product 
from #Index i; 
+1

BY ORDERとして... BRILLIANT –

+0

であること、ありがとうございました。これは本当に私の一日を作りました。 – Ilyas

+0

どうすれば結果をデータベースに挿入できますか?挿入する前にexponentional値を数値に変換したいからです。しかし私はそれをすることができません。どんな助けてもGordon Linoff – Ilyas

関連する問題