【问题标题】:MySQL query to fetch row count of hourly records inserted and max record per minute in that hourMySQL查询以获取每小时插入的记录的行数和该小时内每分钟的最大记录
【发布时间】:2021-06-17 09:02:58
【问题描述】:

我有以下字段的表格

id CreatedOn(yyyymmddhhmmss)           Channel_id

10 20200617160916792                      13

11 20200617160919792                      13
 
12 20200617170919792                      13

13 20200617170919792                      13

14 20200617160920212                      14

我需要一个查询来检查在特定小时内插入了多少总记录,以及根据频道 ID 在该小时内每分钟插入的最大记录数。例如,如果在 15:00-16:00 插入 100 条记录,那么每分钟插入的最大记录是多少。请帮助我创建查询以找到所需的解决方案

我已经运行了这个查询,虽然它给了我每小时的总记录,但我也想知道每分钟插入的最大值是多少。

SELECT DATE_FORMAT(CreatedOn, '%H:00') as hours,
       count(CreatedOn) as total_hit, channel_id
  FROM tbl_transaction_flow where DATE_FORMAT(CreatedOn, '%Y-%m-%d')  = DATE(NOW())
   GROUP BY DATE_FORMAT(CreatedOn, '%Y-%m-%d %H:00'),channel_id;

需要输出为

hours      total_hits   channel_id    max_hit_per_minutes
16:00       100           13           20
17:00       10            13            1

【问题讨论】:

  • 什么是精确的 MySQL 版本?
  • @Akina MYSQL 版本为 8

标签: mysql sql


【解决方案1】:
WITH cte AS ( SELECT DATE_FORMAT(CreatedOn, '%H:%i') as hours_minutes,
                     COUNT(CreatedOn) as hits_per_minute, 
                     Channel_id
              FROM tbl_transaction_flow 
              WHERE DATE(CreatedOn) = /* CURRENT_DATE */ '2020-06-17'
              GROUP BY hours_minutes, Channel_id )
SELECT DISTINCT
       CONCAT(LEFT(hours_minutes, 2), ':00') hours,
       Channel_id,
       SUM(hits_per_minute) OVER win hits_per_hour,
       MAX(hits_per_minute) OVER win max_hits_per_minute
FROM cte
WINDOW win AS (PARTITION BY Channel_id, LEFT(hours_minutes, 2));

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b2635180061e45e761864ff7b4b018f3

SELECT CONCAT(LEFT(hours_minutes, 2), ':00') hours,
       Channel_id,
       SUM(hits_per_minute) hits_per_hour,
       MAX(hits_per_minute) max_hits_per_minute
FROM ( SELECT DATE_FORMAT(CreatedOn, '%H:%i') as hours_minutes,
              COUNT(CreatedOn) as hits_per_minute, 
              Channel_id
       FROM tbl_transaction_flow 
       WHERE DATE(CreatedOn) = /* CURRENT_DATE */ '2020-06-17'
       GROUP BY hours_minutes, Channel_id ) per_minute_data
GROUP BY hours, Channel_id;

https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=d7f14899377fc491efb4ca8635e4a4a6

【讨论】:

  • @akina 我也在为这个解决方案工作。 mysql 5.7 中的这个查询是什么
  • @im5an 添加了 5.6+ 的代码。
  • @akina 我需要修改此查询以根据总 hit_per_hour 和每秒而不是每分钟的最大命中来获取记录。你能帮我吗
  • @HaiderAli 在 HAVING 子句中添加相应的条件。
  • @HaiderAli dbfiddle.uk/…
【解决方案2】:
  SELECT date_format(created_at,'%H %p') AS hour, count(*) AS total_record 
    FROM users 
   WHERE CAST(created_at AS DATE) ="2021-12-15" 
GROUP BY date_format(created_at,'%H %p')

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多