【问题标题】:Count all records in last 12 hours on hourly basis in mysql在mysql中每小时计算过去12小时内的所有记录
【发布时间】:2016-04-11 13:07:56
【问题描述】:

我想从我的 mysql 表中统计过去 12 小时内每小时的记录。

我找到了这个link,但我的问题是,假设现在是 2016 年 1 月 7 日上午 9 点,那么我想计算从 1 月 7 日上午 9 点到 1 月 6 日晚上 9 点的记录。 我的表结构如下:

表名 :: cebod_cdr id|userid|starting_date|total_duration 1 | 17 | 2016-01-07 09:00:00 | 12 2 | 17 | 2016-01-07 07:30:24 | 45 3 | 17 | 2016-01-07 01:12:21 | 5 4 | 17 | 2016-01-06 10:30:00 | 18 5 | 17 | 2016-01-06 10:45:00 | 25

示例输出

小时 |来电 上午 9 点 | 1 上午 8 点 | 0 早上 7 点 | 1 早上 6 点 | 0 早上 5 点 | 0 凌晨 4 点 | 0 凌晨 3 点 | 0 凌晨 2 点 | 0 凌晨 1 点 | 1 上午 12 点 | 0 晚上 11 点 | 0 晚上 10 点 | 2

如果以所需格式(1-12)显示小时有任何问题,我可以以其他格式显示,如 24 小时格式等。

【问题讨论】:

  • 以下答案中的两个查询都会为您提供结果。如果您想每小时运行一次此查询 - 您应该设置一个 cron 作业。
  • 没有。它仅在有数据时显示记录,而即使过去 12 小时内没有记录,我也想显示结果

标签: mysql


【解决方案1】:
SELECT HOUR(starting_date) AS Hour, COUNT(*) AS calls
FROM cebod_cdr
WHERE starting_date > DATE_ADD(NOW(), INTERVAL -12 HOUR)
GROUP BY HOUR(starting_date)

【讨论】:

    【解决方案2】:

    我找到了如下答案:

    选择 za_hours.za_hour 作为小时,COUNT(id) 作为调用 从 ( SELECT NOW() - 间隔 1 小时作为 za_hour UNION SELECT NOW() - 间隔 2 小时作为 za_hour UNION SELECT NOW() - 间隔 3 小时作为 za_hour UNION SELECT NOW() - 间隔 4 小时作为 za_hour UNION SELECT NOW() - 间隔 5 小时作为 za_hour UNION SELECT NOW() - 间隔 6 小时作为 za_hour UNION SELECT NOW() - 间隔 7 小时作为 za_hour UNION SELECT NOW() - 间隔 8 小时作为 za_hour UNION SELECT NOW() - 间隔 9 小时作为 za_hour UNION SELECT NOW() - 间隔 10 小时作为 za_hour UNION SELECT NOW() - 间隔 11 小时作为 za_hour UNION SELECT NOW() - 间隔 12 小时作为 za_hour ) za_hours 左连接 cebod_cdr ON DATE_FORMAT(za_hours.za_hour, '%Y-%m-%d %H:') = DATE_FORMAT(starting_date, '%Y-%m-%d %H:') AND 开始日期 >= NOW() - 间隔 12 小时 按 za_hours.za_hour 分组 由 za_hours.za_hour 订购

    请建议我是否可以改进此查询。

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT
          date_format(dh.starting_date, '%Y-%m-%d %H:%i:%s') as hour,
          COUNT(md.id) AS count
      FROM
          cebod_cdr dh 
          LEFT JOIN cebod_cdr md ON dh.starting_date = DATE_FORMAT(md.starting_date, '%Y-%m-%d %H:00:00')
      WHERE dh.starting_date >= DATE_SUB(NOW(),INTERVAL 12 HOUR)
          AND dh.starting_date <  NOW()
      GROUP BY dh.starting_date
      ORDER BY dh.starting_date
      

      【讨论】:

      • 它只在有数据时显示记录,而我想显示结果,即使过去 12 小时内没有记录。
      • 好吧,这完全改变了查询的某些部分:) 我会编辑它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多