MySQL按10天聚合数据
在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
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
提供一些示例数据两种方法都非常聪明!非常感谢你!