hooman182 :
I have Data
user indeks_sum sks_sum year
2000 76 21 20191
2000 NULL 21 20192
2012 12 24 20191
2012 NULL 8 20192
2042 21 16 20191
2042 NULL 9 20192
2069 8 2 20191
2069 4 1 20192
expected result :
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 12 3 20192
indeks_sum
and sks_sum
increased every year
i have try
select * user,sum(indeks_sum) as indeks_sum, sum(sks_sum) as sks_sum, year
from ips
where year <= year
group by user,year
but result still same.
thanks in advance
GMB :
You can use window functions - if your version of MySQL / MariaDB supports them: this is a good use case for window sums.
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
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
In earlier versions, here is one approach using correlated subqueries:
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
For performance, consider an index on (user, year, indeks_sum)
and another on (user, year, sks_sum)
.
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=298185&siteId=1