在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'
....
;假设我需要这样做一个月,甚至更长的时间,将会有很多的UNION ALL。
我知道这可以通过在存储过程中使用循环来实现,但是有什么方法可以不使用存储过程来做到这一点呢?也就是说,GROUP BY条款能起作用吗?
谢谢!
表印样本数据:日期输入2014-11-10 10 2014-11-09 15 2014-11-08 7
发布于 2014-11-11 12:43:10
可以将结果放在列中并使用条件聚合:
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,但需要一个值表:
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
) nhttps://stackoverflow.com/questions/26864885
复制相似问题