带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是表的名称。