我想获取ax天间隔内的记录数。间隔是重叠的。示例:对于给定的时间范围(比如说30天),我想获得前5天(包括第1天-第5天)的计数,然后计算第2天-第6天,然后计算第3天-第7天,然后第4天-第8天,依此类推,直到到达第26天-第30天。
最好的方法是什么?是否可以检索30天然后分组的所有数据?获取每个子区间的查询,然后将它们合并在一起?另一种方法?查询是什么样的?
示例输出,范围不一定但有帮助。
count, range
30, 2016-01-01 - 2016-01-05
32, 2016-01-02 - 2016-01-06
34, 2016-01-03 - 2016-01-07
33, 2016-01-04 - 2016-01-08
希望它可以理解,如果不能,请告诉我,我会澄清。
谢谢!
您需要加入一个包含每个日期范围的表。您可以使用一堆UNION
s快速创建它。
SELECT t1.start, t1.end, COUNT(t2.date) AS count
FROM (SELECT '2016-01-01' AS start, '2016-01-05' AS end
UNION
SELECT '2016-01-02', '2016-01-06'
UNION
SELECT '2016-01-03', '2016-01-07'
UNION
SELECT '2016-01-04', '2016-01-08'
...) AS t1
LEFT JOIN yourTable AS t2 ON t2.date BETWEEN t1.start AND t1.end
GROUP BY t1.start
将LEFT JOIN
您看到的0计数的任何日期范围没有记录保证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句