Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按10天聚合数据_Mysql_Aggregation - Fatal编程技术网

MySQL按10天聚合数据

MySQL按10天聚合数据,mysql,aggregation,Mysql,Aggregation,在MySQL中,假设我需要在一段时间内每隔10天聚合一次数据,例如 SELECT SUM(imps) FROM impressions i WHERE i.date BETWEEN SUBDATE('2014-11-10', 9) AND '2014-11-10' UNION ALL SELECT SUM(imps) FROM impressions i WHERE i.date BETWEEN SUBDATE('2014-11-08', 9) AND '2014-11-08' UNION A

在MySQL中,假设我需要在一段时间内每隔10天聚合一次数据,例如

SELECT SUM(imps) FROM impressions i WHERE i.date BETWEEN SUBDATE('2014-11-10', 9) AND '2014-11-10'
UNION ALL 
SELECT SUM(imps) FROM impressions i WHERE i.date BETWEEN SUBDATE('2014-11-08', 9) AND '2014-11-08'
UNION ALL
SELECT SUM(imps) FROM impressions i WHERE i.date BETWEEN SUBDATE('2014-11-07', 9) AND '2014-11-07'
....
;
假设我需要这样做一个月甚至更长的时间,将会有很多
联合所有的

我知道这可以通过在存储过程中使用循环来实现,但是有没有不使用存储过程的方法来实现呢?也就是说,
groupby
子句能起作用吗

谢谢

表印象的示例数据: 日期小鬼 2014-11-10 10 2014-11-09 15 2014-11-08 7

您可以将结果放在列中并使用条件聚合:

SELECT SUM(case when i.date BETWEEN SUBDATE('2014-11-10', 9) AND '2014-11-10' then imps else 0 end),
       SUM(case when i.date BETWEEN SUBDATE('2014-11-08', 9) AND '2014-11-08' then imps else 0 end),
       SUM(case when i.date BETWEEN SUBDATE('2014-11-07', 9) AND '2014-11-07' then imps else 0 end)    
FROM impressions i;
如果希望它们位于不同的行中,则可以使用
联接
,但需要一个值表:

SELECT SUM(case when i.date BETWEEN SUBDATE('2014-11-10', 9 + n.n) AND '2014-11-10' - interval n.n day
                then imps else 0 end)
FROM impressions i CROSS JOIN
     (SELECT 0 as n UNION ALL
      SELECT 1 UNION ALL
      SELECT 2
     ) n

提供一些示例数据两种方法都非常聪明!非常感谢你!