Суммарная сумма за дни

У меня есть таблица MySQL, подобная следующей:

date         count
2010-01-01   5
2010-01-02   6
2010-01-03   7

Как я могу накапливать сумму каждого дня на следующий? Итак, результат такой:

date         acum per day
2010-01-01   5
2010-01-02   11
2010-01-03   18

Я думаю, мне нужно что-то для (каждой даты) ... но без понятия.


Только последний запрос, который я использовал после ответа Эрика. (Благодарность).

ВЫБЕРИТЕ t1.dia, сумму (t2.operacions), сумму (t2.amount) ОТ

(SELECT count(*) operations, sum(amount), date(b.timestamp) dia
    FROM transactions b group by date(b.timestamp)) t1 

INNER JOIN 

(SELECT count(*) operations, sum(amount), date(b.timestamp) dia
    FROM transactions b group by date(b.timestamp)) t2 

ON t2.dia <= t1.dia GROUP BY t1.dia

person user373259    schedule 22.06.2010    source источник
comment
Что такое тип данных date?   -  person OMG Ponies    schedule 22.06.2010
comment
Это временная метка, которую я конвертирую с помощью функции date(). В основном это список транзакций, и мне нужно найти накопленный после каждого дня. Пробуем решение сейчас.   -  person user373259    schedule 22.06.2010


Ответы (3)


Ну, я думаю, что это сработает, хотя не уверен, как будет производительность:

SELECT t1.date, sum(t2.count)
FROM mytable t1 INNER JOIN mytable t2 ON t2.date <= t1.date
GROUP BY t1.date
person Eric Petroelje    schedule 22.06.2010
comment
Это предполагает, что все данные date относятся либо к типу данных DATETIME для одного и того же времени, либо к столбцу относится [var]char, что может привести к неправильной оценке при объединении. - person OMG Ponies; 22.06.2010
comment
@Ponies - Правильно, если бы в дате был компонент времени, ему нужно было бы сделать некоторые преобразования, чтобы получить только часть даты. Поскольку в своем вопросе он указал только даты, я предположил, что это все, что он хранил. - person Eric Petroelje; 22.06.2010
comment
@Ponies. Кроме того, даже если это VARCHAR, похоже, он использует формат ГГГГ-ММ-ДД, поэтому они должны правильно сравниваться даже в виде строк. - person Eric Petroelje; 22.06.2010
comment
Это сработало для меня. Не знал, что такое условное соединение возможно! Очень полезно. Спасибо. - person user373259; 22.06.2010
comment
Интересно, на какой версии MySQL это работало. У меня не работает на 5.6 с «Неизвестный столбец t2.count в списке полей». - person user3741598; 01.07.2014

Можно решить эту проблему без соединения.

SET @cumulative_sum := 0;
SELECT date, @cumulative_sum := @cumulative_sum + count AS cumulative_sum
FROM table
ORDER BY date ASC
person Naktibalda    schedule 22.06.2010

Самостоятельное соединение с помощью ‹= и суммирования строки позволит выполнить это.

person buckbova    schedule 22.06.2010