2015-02-08 2 views
1

Я использую MySQL и должен отображать сумму всех предыдущих значений, включая текущую строку, для каждой строки.Отображать сумму после каждой строки

date | val | total 
------------------ 
15M | 20 | 20 
17M | 15 | 35 
1APR | -5 | 30 
------------------- 

Таким образом, в базе данных у меня есть только date и val для каждой даты. В настоящее время я использую SELECT date, val FROM table ORDER BY DATE ASC. Как я могу добавить столбец total? Думаю, я бы использовал запрос SUM, но как добавить сумму для каждой строки?

+0

может быть ' select date, val, qty, @s: = @ s + total в качестве промежуточного итога из mytable' – skobaljic

+0

SELECT * FROM my_table; – Strawberry

ответ

3

В случае, если вы можете использовать переменную, вы можете легко вычислить накопленную сумму таким образом

set @csum := 0; 
select date, val, (@csum := @csum + val) as cumulative_sum 
from table 
order by date DESC; 

EDIT Существует способ определить переменную в объединении

select t.date, t.val, (@csum := @csum + t.val) as cumulative_sum 
from table t 
join (select @csum := 0) r 
order by date DESC; 
+0

'В случае, если вы можете использовать переменную'. Почему я не могу использовать переменную? – Cristy

+0

Я не уверен. Это зависит от того, какую библиотеку или SQL-клиент вы используете. – bpgergo

+0

Это работает. Моя единственная проблема заключается в том, что общая сумма вычисляется по 'date',' asccending', но я должен отображать результаты в порядке убывания (сначала самые новые записи). Могу ли я сделать сумму в порядке возрастания, а затем отсортировать результаты в порядке убывания? – Cristy

Смежные вопросы