У меня есть, например, в следующей таблице:Роллинг накопленная сумма на MySQL запрос
date sales
2016-02-01 2
2016-02-02 4
2016-02-03 4
2016-02-04 7
2016-02-05 3
2016-02-06 1
2016-02-07 6
2016-02-08 3
Я хотел бы получить столбец, который делает прокатки кумулятивную сумму продаж за х дней. Например, в течение 3-х дней мы получим:
date sales rolling_cumul_3_days
2016-02-01 2 2
2016-02-02 4 6
2016-02-03 4 10
2016-02-04 7 15
2016-02-05 3 14
2016-02-06 1 11
2016-02-07 6 10
2016-02-08 3 10
Можно ли получить в одном запросе, или я должен запустить накопленную сумму для каждой даты в течение последних х дней, а затем агрегировать результат?
Это общая идея у меня есть для этого запроса (но, безусловно, не правильно ...):
/* Initiate variables */
SET @csum := 0;
SET @date_cursor := '2016-02-01'
/* Query for rolling result */
SELECT date, sales, MAX(
/* Query that cumulate sales on a three day interval for each date */
SELECT (@csum := @csum + sales) as cumul_3_days
FROM table
WHERE date <= @date_cursor
AND date >= DATE_SUB(@date_cursor, INTERVAL -2 DAY);
/* Reset variables for next date */
SET @csum := 0;
SET @date_cursor := DATE_ADD(@date_cursor, INTERVAL 1 DAY);
) AS rolling_cumul_3_days
FROM table
Вы должны были бы иметь 3 переменные: 2 для сумм проката и счетчик, чтобы определить, какую переменную заменить на текущую сумму. – Shadow