2017-10-23 49 views
-1

以下のクエリを作成し、最後の行に1000の初期値を持つ別の列を作成しようとしていて、元の1000をmdp.DataPointValueで乗算し、 1000は、新たに計算された値を使用します。前回計算された行レコードに基づくSQLの乗算

たとえば、5/25/10に開始値を1000にしたいと思います。5/26/10にmdp.DataPointValue *以前の値(最初の値は1000)に。

SELECT AsOfDate, mdp.DataPointValue, 
     1000 * exp(sum(log(mdp.DataPointValue)) over (order by AsOfDate)) 
FROM DataPointPITs mdp 
WHERE mdp.DataPointId = '2710' AND AsOfDate > '2010-05-25' 
ORDER BY AsOfDate DESC; 

答えて

0

は、あなたがSUM()と演算を使用して、累積製品を行うことができいただければ幸いですLAG()のために

SELECT  AsOfDate, 
       mdp.DataPointValue, 
       mdp.DataPointValue * LAG(mdf.DataPointValue, 1, 1000) OVER (ORDER BY AsOfDate DESC) 
FROM   DataPointPITs AS mdp 
WHERE  mdp.DataPointId = '2710' AND AsOfDate > '2010-05-25' 
ORDER BY  AsOfDate DESC 

窓関数のすごい世界へようこそ。

+0

前の列* DPValueには列名がないところが見えるようになりますが、5/25/10は1000 * AsOfDate DataPointValue(列名なし)から始める必要があります * 6/1/2010 0.81 1059.144652 * 0.934 1307.58599 /28/2010年5 * 1.327 1399.985 /27/2010年5 */2010分の26 1.055 1055 5 */25/2010 djk11 @ 0.951 1000年 – djk11

+0

5。 。 。これは何ではないのですか? –

+0

@ djk11。 。 。私は答えを修正しました。 SQL Serverは関数 'log()'を呼び出します。 –

1

この音:すべてのヘルプは非常に値が常に正(決して負またはゼロ)であり、何のギャップを持っていないと仮定すると、

SELECT  AsOfDate, 
       mdp.DataPointValue 
FROM   DataPointPITs AS mdp 
WHERE  mdp.DataPointId = '2710' AND AsOfDate > '2010-05-25' 
ORDER BY  AsOfDate DESC 
+0

列名がない* =前の列* DPValueのようになりますが、5/25/10は1000 * AsOfDate DataPointValue(列名なし)から始める必要があります。 * 6/1/2010 0.81 1059.144652 * 5/28/2010 0.934 1307.58599 * 5/27/2010 1.327 1399.985 * 5/26/2010 1.055 1055 * 5/25/2010 0.951 1000 – djk11

関連する問題