如何从重叠的日期范围中检索计数?

时间:2016-08-05 22:07:12

标签: mysql sql

我想获得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

希望它是可以理解的,如果不是,请告诉我,我会澄清。

谢谢!

1 个答案:

答案 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计数。