【问题标题】:MySql extract counters grouped by dateMySql 提取计数器按日期分组
【发布时间】:2017-09-27 14:00:47
【问题描述】:

我有一个存储一些 API 请求的表。每个请求都有一个状态码和一个 created_on 时间戳(不是 unix 时间戳),表示它的创建时间。

在我的应用程序中,我想构建一个图表并向用户显示每分钟执行的请求数量。

我正在尝试计算每分钟的请求数,并将这些请求的日期提取到分钟,但忽略秒数。

如果插入时间戳2017-09-27 00:33:44 并且许多其他请求被存储在分钟33 但不同的秒数我想忽略这些秒数并得到这个结果:

2017-09-27 00:32:00` : 1 (requests) 2017-09-27 00:33:00` : 4 (requests)

有没有办法做到这一点,或者我应该将 created_on 字段分解为年、月、日、小时、分钟,然后按这些分组?

我准备了一个sqlfiddle作为例子。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    例如使用你的小提琴:

     SELECT DATE_FORMAT(created_on,'%Y-%m-%d %h:%i:00') minute 
          , COUNT(*) total 
       FROM api_request 
      GROUP 
         BY minute;
    

    【讨论】:

      【解决方案2】:

      你可以试试:

      SELECT CONCAT(SUBSTRING(created_on, 1, 16), ':00'), COUNT(*)
      FROM table
      GROUP BY 1 ORDER BY 1;
      

      【讨论】:

        【解决方案3】:

        MySQL 不仅可以直接按数据分组,还可以按数据计算的值分组。这立即导致了一个强大而优雅的解决方案:

        SELECT timestamp, COUNT(*)
        FROM table
        GROUP BY YEAR(timestamp),
                 MONTH(timestamp),
                 DAY(timestamp),
                 HOUR(timestamp),
                 MINUTE(timestamp)
        

        这会选择相应分钟的计数和相应的完整时间戳。对于您的情况,这可能不够,也可能不够,因为它不直接显示分钟,而只是一个时间戳,包括秒,它位于在那一分钟内

        根据该时间戳,您当然可以轻松计算分钟,但其他答案已经为您提供了分钟,无需进一步努力,因此它们可能更适合您的情况。

        另一方面,我认为(但不确定,目前无法测试)我的解决方案可能很快。

        【讨论】:

        • 你怎么知道哪个 COUNT 对应于哪一分钟?
        • @Strawberry 我明白了。感谢您的提示和+1。你说的对。我会做广告的。
        猜你喜欢
        • 2011-07-21
        • 1970-01-01
        • 2022-12-01
        • 2014-11-06
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多