2016-10-25 4 views
1

Question - Multiply previous rows SQL前のすべての行の値を掛けてください。

上記の画像を参照してください。

私は表1を持っている、と私はSQLで表2を生成します。

初年度は値に設定する必要があります例えば、表1

にその年と前の年のために乗算器10を掛けます以下の10の値:2002について

  • 、値がされる10 * 2、値は10 * 5 * 3 * 1 * 2 * 1(すべての前年の乗算)となる2005(2002乗算器)* 1(2001乗数)= 20
  • = 300 。

これをどうやってやりますか?私はどんな助けにも感謝しています。

+0

RDMS /バージョンは、あなたがオンになっていますか? –

+0

どのrdbms? – Insac

+0

SQL Serverでは 'over partition'を使用できます – Hackerman

答えて

0

ずっと前に私の同僚は私に対数のプロパティを使用してこの種の問題を解決するためのトリックを教えてくれました。

基本的にあなたが行うことができます:OPは、私はそれはあなたが自己結合

でこれを適用すべき必要な累積ロジックを実行するには

不完全だっ実感しました後に編集

Exp(sum(ln(multiplier))) 

select a.youryear, Exp(sum(ln(b.multiplier))) cumulative_mutiplier from yourtable as a join yourtable as b on a.youryear>=b.youryear group by a.youryear; 

私はテストを準備しましたrextester

create table yourtable (
     youryear integer, 
     multiplier integer 
); 

    insert into yourtable(youryear,multiplier) values (2000,10); 
    insert into yourtable(youryear,multiplier) values (2001,1); 
    insert into yourtable(youryear,multiplier) values (2002,2); 
    insert into yourtable(youryear,multiplier) values (2003,1); 
    insert into yourtable(youryear,multiplier) values (2004,3); 
    insert into yourtable(youryear,multiplier) values (2005,5); 

    select a.youryear, Exp(sum(ln(b.multiplier))) cumulative_mutiplier 
    from yourtable as a 
     join 
     yourtable as b on a.youryear>=b.youryear 
    group by a.youryear; 

結果は次のとおりです。

youryear cumulative_mutiplier 
1 2000 10 
2 2001 10 
3 2002 20 
4 2003 20 
5 2004 60 
6 2005 300 
+0

そうすることで、去年の欲しい価値しか得られなくなります。 – jerbear

+0

ありがとうございます!完璧に働いた。 – jerbear

0
select  year 
      ,x 
      ,@result := @result*coalesce(x,10) as result 

from  table1,(select @result:=1) i 

order by year 
; 

# year, x, result 
2000, , 10 
2001, 1, 10 
2002, 2, 20 
2003, 1, 20 
2004, 3, 60 
2005, 5, 300 
関連する問題