上記の画像を参照してください。
私は表1を持っている、と私はSQLで表2を生成します。
初年度は値に設定する必要があります例えば、表1
にその年と前の年のために乗算器10を掛けます以下の10の値:2002について
- 、値がされる10 * 2、値は10 * 5 * 3 * 1 * 2 * 1(すべての前年の乗算)となる2005(2002乗算器)* 1(2001乗数)= 20
- = 300 。
これをどうやってやりますか?私はどんな助けにも感謝しています。
上記の画像を参照してください。
私は表1を持っている、と私はSQLで表2を生成します。
初年度は値に設定する必要があります例えば、表1
にその年と前の年のために乗算器10を掛けます以下の10の値:2002について
これをどうやってやりますか?私はどんな助けにも感謝しています。
ずっと前に私の同僚は私に対数のプロパティを使用してこの種の問題を解決するためのトリックを教えてくれました。
基本的にあなたが行うことができます: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
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
RDMS /バージョンは、あなたがオンになっていますか? –
どのrdbms? – Insac
SQL Serverでは 'over partition'を使用できます – Hackerman