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

Daterange histogram with SQL (MySQL)

我有一个 table 日期范围如下:

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 中为 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;