请参考上图。
我有表1,我想用SQL产生表2。
元年必须被设置为值10以下将由乘法器乘10当年和往年于表1
对于示例中的值:
- 对于2002年(2002年乘数)* 1(2001年乘数)= 20。
- 2005年的数值为10 * 5 * 3 * 1 * 2 * 1(前一年所有乘数)= 300 。
我会如何去做这件事?我会很感激任何帮助。
请参考上图。
我有表1,我想用SQL产生表2。
元年必须被设置为值10以下将由乘法器乘10当年和往年于表1
对于示例中的值:
我会如何去做这件事?我会很感激任何帮助。
我的一位同事很早就教会了我使用对数特性来解决这类问题的技巧。
基本上,你可以这样做:
Exp(sum(ln(multiplier)))
的OP后,编辑让我意识到这是不完整的
要你需要,你应将此上累积逻辑自联接
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
哪个关系数据库管理系统/版本是你吗? –
在哪个rdbms上? – Insac
有了SQL Server,你可以使用'over partition' – Hackerman