2015-10-28 46 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