Мой коллега давно научил меня хитрости решить такие проблемы, используя свойства логарифма.
В принципе вы можете сделать:
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
Какой RDMS/версия вы? –
На каких rdbms? – Insac
С SQL Server вы можете использовать 'over partition' – Hackerman