Вам нужны кумулятивные суммы для каждого столбца.Чтобы это работало, вам нужен столбец, в котором указан порядок - таблицы SQL представляют неупорядоченные наборы.
Если у вас есть такой столбец, то часто будет работать следующее:
select t.*,
(@a := if(@id = id, @a + a, 0)) as a,
(@b := if(@id = id, @b + b, 0)) as b,
(@c := if(@id = id, @c + c, 0)) as c,
(@d := if(@id = id, @d + d, 0)) as d,
@id := id
from (select t.*
from t
order by t.id, ? -- column for the ordering
) t cross join
(select @id := -1, @a := 0, @b := 0, @c := 0 @d := 0) params;
Однако это не гарантированно для работы, потому что MySQL не гарантирует порядок вычисления выражений в SELECT
.Итак, я думаю, что подзапросы могут быть самым простым методом:
select t.id,
(select sum(t2.a) from t t2 where t2.id = t.id and t2.? <= t.?) as a,
(select sum(t2.b) from t t2 where t2.id = t.id and t2.? <= t.?) as b,
(select sum(t2.c) from t t2 where t2.id = t.id and t2.? <= t.?) as c,
(select sum(t2.d) from t t2 where t2.id = t.id and t2.? <= t.?) as d
from t;