2015-10-28 50 views
0

我想根据以前的数据获取当前总和。例:从单个表格计算运行总计

******************************************* 
* Current balance * Total sum * 
******************************************* 
    8500     8500 
    -500.50     7999.50 
    380.90     8380.40 
    -5500     2880.40 

我没有任何自己的代码来展示,因为我不知道如何做到这一点,除了使用简单SUM()SELECT SUM(data_sum) FROM table ...)。

我发现了很多类似的问题,但我不明白答案(example 1)。

这里是我的表:

`id` int(11) NOT NULL AUTO_INCREMENT, 
`id_user` int(11) DEFAULT NULL, 
`id_account` int(11) DEFAULT NULL, 
`id_account_to` int(11) DEFAULT NULL, 
`id_store` int(11) DEFAULT NULL, 
`id_image` int(11) DEFAULT NULL, 
`data_name` varchar(45) NOT NULL, 
`data_name_short` varchar(45) NOT NULL, 
`data_sum` decimal(10,2) DEFAULT NULL, 
`data_file` text NOT NULL, 
`data_note` text NOT NULL, 
`is_transfered` tinyint(4) DEFAULT NULL, 
`add_time` tinyint(4) DEFAULT NULL, 
`datetime_payed` datetime NOT NULL, 
`datetime_added` datetime NOT NULL, 
`datetime_edited` datetime NOT NULL 

现在我的问题:我怎样才能使SQL查询计算运行总像在第一个例子中,基于上面的表格?

+0

可能的重复[在MySQL中计算运行总数](http://stackoverflow.com/questions/664700/calculate-a-running-total-in-mysql) – sgeddes

+0

@sgeddes这就是事情(和我一样在我的问题中明确表示):我不明白答案! – Erik

+0

你引用了一个'sql server'的解决方案,但是你标记了'mysql' - 大大不同的实现......另一个很棒的帖子 - http://stackoverflow.com/a/2563940/1073631 – sgeddes

回答

0

您可以使用变量做到这一点:

select data_sum, (@s := @s + data_sum) as cume_sum 
from table t cross join 
    (select @s := 0) params 
order by ??; 

在做的累加值,你应该通过一定的价值(通常是一个时间列)进行排序。

+0

这与正确的'ORDER BY'目标一起工作:)非常感谢一个干净的答案^^,我会尽快接受它。 – Erik