【问题标题】:Counting daily and hourly results in mySQL在 mySQL 中计算每天和每小时的结果
【发布时间】:2015-04-11 17:15:00
【问题描述】:

我在 mySQL 中有两张表,一张用于查看,一张用于下载,其关键结构如下:

ip          | hit
---------------------------------------
127.0.0.1   | 2015-02-08 15:16:59
127.0.0.1   | 2015-02-08 15:20:22   
127.0.0.1   | 2015-02-08 15:20:35   
127.0.0.1   | 2015-02-08 15:21:13
10.0.1.1    | 2015-02-09 16:29:13
10.0.1.1    | 2015-02-09 16:42:12
10.0.1.1    | 2015-02-09 16:52:30
10.0.1.1    | 2015-02-10 10:52:30
10.0.1.1    | 2015-02-10 10:52:30
10.0.1.1    | 2015-02-10 12:52:30

我需要返回一个查询,该查询将计算每天有多少行,理想情况下它也会返回空天/小时,但如果 SQL 查询过于复杂,我可以使用 PHP 轻松填补这些空白。

time        | count
---------------------------------------
2015-02-08  | 4
2015-02-09  | 3
2015-02-10  | 3

我还需要每小时获取相同的信息

time                          | count
---------------------------------------
2015-02-08 15:00:00           | 4
2015-02-09 16:00:00           | 3
2015-02-10 10:00:00           | 2
2015-02-10 10:00:00           | 1

到目前为止,在将我在网上找到的一些东西拼凑成实际有效的东西后,我得到了以下查询,但它只返回一个月中的某一天是唯一的,我需要让查询可以在多个月内延伸,所以只有知道这一天并没有太大帮助。

select dayofmonth(hit) as Day_of_month, count(*) as records from table_name hit >= '2015-02-01 00:00:00' and hit <  '2015-03-01 00:00:00' group by dayofmonth(hit)

我已经看到了一些类似的帖子,但我发现唯一的帖子似乎使用了 mySQL 中不存在的函数,任何帮助将不胜感激。

编辑

经过更多的摆弄,我现在让它返回每个日期的计数,我可以很容易地通过 where 来限制它,但是我仍然不知道让它每小时工作一次。

SELECT date(hit) AS The_Date, count( * ) AS count FROM table_name GROUP BY The_Date ORDER BY The_Date ASC

【问题讨论】:

    标签: php mysql database datetime wordpress


    【解决方案1】:

    最简单的方法是使用 date_format 函数

    • 获取按天分组的所有记录

      select date_format(date, '%Y-%m-%d') time, count(*) from test group by time order by time;
      
    • 获取按小时分组的所有记录

      select date_format(date, '%Y-%m-%d %H:00:00') time, count(*) from test group by date_format(date, '%Y-%m-%d %H') order by time;
      

    Here 是您的示例的 sqlfiddle

    【讨论】:

    • 我想发布类似的答案,但你的速度更快 :) +1
    • 我在您发布此内容前几分钟进行了编辑,您知道我的 date_format(hit, '%Y-%m-%d') 或 date(hit) 哪个更快有吗?
    • 我还进行了更改,将 group by date_format(date, '%Y-%m-%d %H') 设置为时间,你不知道这是否会更快?我认为这是因为不必重新运行函数。
    【解决方案2】:

    试试这样的:

    SELECT DATE(hit) AS Day, HOUR(TIME(hit)) AS Hour, COUNT(*) as Count
    FROM table_name
    GROUP BY Day, Hour
    

    (已编辑)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多