データは現在値以下の値を有する場合のデータを選択します

hooman182:

私はデータを持っています

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

期待される結果 :

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そしてsks_sum、すべての増加year
、私は試してみます

select * user,sum(indeks_sum) as indeks_sum, sum(sks_sum) as sks_sum, year
from ips
where year <= year
group by user,year

それでも同じ結果。
前もって感謝します

GMB:

あなたは、ウィンドウ関数を使用することができます - 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フィドルのデモ

ユーザー| indeks_sum | sks_sum | 
---:| ---------:| ------:| ----:
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)

デモ

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=299010&siteId=1