我有例如下表:
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
我想获得一个列,其中包含x天内销售额的滚动累计总和。例如,超过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
是否可以在单个查询中获取,或者我是否必须为过去x天中的每个日期运行累积总和,然后汇总结果?
这是我对此查询的一般概念(但绝对不正确......):
/* 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
答案 0 :(得分:0)
没有变量:
SELECT
DATEPART(hour, DateData)/6,
AVG(OtherData) AS AvgData
FROM DATASITE
GROUP BY DATEPART(hour, DateData)/6
--Result:
|Column1 | AvgData|
|0 | 11|
|1 | 12|
|2 | 13|
|3 | 14|
如果性能是一个问题,那么毫无疑问,即将出现变量型解决方案。