我想获得x天间隔内的记录数。间隔重叠但是。示例:对于给定的时间范围(比方说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
希望它是可以理解的,如果不是,请告诉我,我会澄清。
谢谢!
答案 0 :(得分:1)
您需要加入包含每个日期范围的表格。您可以使用一堆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计数。