Вы можете использовать оконные функции - если ваша версия MySQL / MariaDB поддерживает их: это хороший вариант использования для оконных сумм.
select
user,
sum(indeks_sum) over(partition by user order by year)) indeks_sum,
sum(sks_sum) over(partition by user order by year) sks_sum,
year
from ips
order by user, year
Демонстрация на DB Fiddle :
user | indeks_sum | sks_sum | year
---: | ---------: | ------: | ----:
2000 | 76 | 21 | 20191
2000 | 76 | 42 | 20192
2012 | 12 | 24 | 20191
2012 | 12 | 32 | 20192
2042 | 21 | 16 | 20191
2042 | 21 | 25 | 20192
2069 | 8 | 2 | 20191
2069 | 4 | 3 | 20192
В более ранних версиях есть один подход, использующий коррелированные подзапросы:
select
i.user,
(select sum(i1.indeks_sum) from ips i1 where i1.user = i.user and i1.year <= i.year) indeks_sum,
(select sum(i1.sks_sum) from ips i1 where i1.user = i.user and i1.year <= i.year) sks_sum,
i.year
from ips i
order by i.user, i.year
Для производительности рассмотрим индекс для (user, year, indeks_sum)
и еще один на (user, year, sks_sum)
.
Демо