带SQL的日期范围直方图(MySQL)

带SQL的日期范围直方图(MySQL),mysql,sql,histogram,date-range,Mysql,Sql,Histogram,Date Range,我有一个日期范围如下的表格: start | end 2020-07-25 20:37:00 2020-07-25 20:44:00 2020-07-25 21:37:00 2020-07-25 22:44:00 2020-07-26 07:11:00 2020-07-27 10:50:00 ... 最后,我想要一个柱状图,显示一天中每小时有多少日期范围重叠。 因此,得到的直方图由24条组成 如何在SQL for MySQL中实现这一点?

我有一个日期范围如下的表格:

start                 | end
2020-07-25 20:37:00     2020-07-25 20:44:00
2020-07-25 21:37:00     2020-07-25 22:44:00
2020-07-26 07:11:00     2020-07-27 10:50:00
...
最后,我想要一个柱状图,显示一天中每小时有多少日期范围重叠。 因此,得到的直方图由24条组成

如何在SQL for MySQL中实现这一点?旁注:我使用的是TypeORM,但我能够编写简单的SQL语句

我只找到了使用TIMESTAMPDIFF按单个间隔的长度计算和分组的解决方案,但这不是我想要实现的


在将来,我可能想显示相同的直方图,不是每小时,而是每天每分钟或每月每天,等等。但我认为,一旦我了解了查询的概念,就很容易做到这一点:

一种方法是蛮力方法:

with recursive hours as (
      select 0 as hh
      union all
      select hh + 1
      from hours
      where hh < 23
     )
select h.hh, count(t.start)
from hours h left join
     t 
     on start >= '2020-07-25' + interval h.hh hour and
        end < '2020-07-25' + interval (h.hh + 1) hour
where end < '2020-07-25' + interval 1 day and
      start >= '2020-07-25'
group by h.hh
order by h.hh;

一种方法是蛮力法:

with recursive hours as (
      select 0 as hh
      union all
      select hh + 1
      from hours
      where hh < 23
     )
select h.hh, count(t.start)
from hours h left join
     t 
     on start >= '2020-07-25' + interval h.hh hour and
        end < '2020-07-25' + interval (h.hh + 1) hour
where end < '2020-07-25' + interval 1 day and
      start >= '2020-07-25'
group by h.hh
order by h.hh;

谢谢你的回答,但是什么是桌上时间和t?我只有一张桌子,我们叫它tableX,有开始和结束columns@KristofKomlossy . . . 小时是一个循环使用的CTE,t是表的名称。谢谢你的回答,但什么是表小时和t?我只有一张桌子,我们叫它tableX,有开始和结束columns@KristofKomlossy . . . 小时是一个循环使用的CTE,t是表的名称。