我在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查询过于复杂,我可以轻松填补这些空白。
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中,任何帮助都会受到赞赏。
修改
经过更多的摆弄之后,我现在让它返回每个日期的计数,以下我可以很容易地限制,但是我仍然没有明智的做法每小时工作。
SELECT date(hit) AS The_Date, count( * ) AS count FROM table_name GROUP BY The_Date ORDER BY The_Date ASC
答案 0 :(得分:4)
最简单的方法是使用 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 :(得分:2)
尝试这样的事情:
SELECT DATE(hit) AS Day, HOUR(TIME(hit)) AS Hour, COUNT(*) as Count
FROM table_name
GROUP BY Day, Hour
(编辑)的