让我说我在mysql中有这样的数据:
date | value
2010 | 1
2011 | 4
2012 | 2
2013 | 3
我想要这样的结果:
date | value
2010 | 1
2011 | 5
2012 | 7
2013 | 10
我认为这很简单。我正在尝试:
select tabelA.date, sum(value)
from tabelA
inner join (select date from tabelA group by date) b on tabelA.date > b.date
group by tabelA.date
我觉得我缺少明显的东西。看起来很简单。
有什么想法吗?
答案 0 :(得分:1)
MySQL 8+中最好的方法是窗口函数:
select a.date,
sum(a.value) over (order by a.date)
from tabelA a
order by a.date;
在旧版本中,变量可能是最好的方法,但必须谨慎使用:
select date, (@csum := @csum + value) as running_sum
from (select a.date, a.value as value
from tableA a
order by a.date
) a cross join
(select @csum := 0) params;
尤其是,您希望子查询中的order by
确保以正确的顺序处理数据。
答案 1 :(得分:0)
SELECT
b.date,( SELECT sum( a.`value` ) FROM aa a WHERE a.date <= b.date ) value
FROM
aa b
GROUP BY
b.date
答案 2 :(得分:0)
您可以使用变量:
SET @cumulative := 0;
SELECT date, (@cumulative := @cumulative+value) as value FROM tabelA
这只会跟踪当前金额。从本质上说,它是this answer的次要调整,以获取行号。