【问题标题】:Daterange histogram with SQL (MySQL)使用 SQL (MySQL) 的日期范围直方图
【发布时间】:2020-09-12 17:27:02
【问题描述】:

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

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 找到了按各个间隔的长度计算和分组的解决方案,但这不是我想要实现的。

将来我可能希望显示相同的直方图,而不是每小时,而是一天中的每分钟或一个月中的每一天,依此类推。但是我认为一旦我了解了查询的想法,这很容易做到:)

【问题讨论】:

    标签: mysql sql histogram date-range


    【解决方案1】:

    一种方法是蛮力法:

    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,有“开始”和“结束”列
    • @KristofKomlossy 。 . . hours 是 CTE(递归使用),t 是您的表的名称。
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多