首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL按10天汇总数据

MySQL按10天汇总数据
EN

Stack Overflow用户
提问于 2014-11-11 12:25:06
回答 1查看 77关注 0票数 0

在MySQL中,假设我需要在某一段时间内每10天汇总一次数据。

代码语言:javascript
复制
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'
....
;

假设我需要这样做一个月,甚至更长的时间,将会有很多的UNION ALL

我知道这可以通过在存储过程中使用循环来实现,但是有什么方法可以不使用存储过程来做到这一点呢?也就是说,GROUP BY条款能起作用吗?

谢谢!

表印样本数据:日期输入2014-11-10 10 2014-11-09 15 2014-11-08 7

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 12:43:10

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

代码语言:javascript
复制
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;

如果希望将它们放在不同的行中,则可以使用join,但需要一个值表:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26864885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档