考虑下面的表,其中包含字段 - id(int)和date_created(datetime):
id date_created
1 2010-02-25 12:25:32
2 2010-02-26 13:40:37
3 2010-03-01 12:02:22
4 2010-03-01 12:10:23
5 2010-03-02 10:10:09
6 2010-03-03 12:45:03
我想知道这组数据当天最繁忙/最受欢迎的时刻。在这个例子中,我正在寻找的结果将是12。
想法?
答案 0 :(得分:7)
要获得最受欢迎的小时数,请使用此查询
select date_format( date_created, '%H' ) as `hour`
from [Table]
group by date_format( date_created, '%H' )
order by count(*) desc
limit 1;
如果您想查看所有数据,请使用此
select count(*) as num_records
, date_created
, date_format( date_created, '%H' ) as `hour`
from [Table]
group by `hour`
order by num_records desc;
答案 1 :(得分:3)
如果你想要一些更灵活的东西,也许是半小时或四分之一小时,你可以做到以下几点:
SELECT floor(time_to_sec(date_created)/3600),count(*) AS period
FROM table GROUP BY period ORDER BY c DESC
如果你想要最受欢迎的2小时间隔,请使用7200.最受欢迎的15分钟间隔,使用900.你只需要记住你正在处理秒(一小时3600秒)。
答案 2 :(得分:2)
使用hour()
功能提取小时,然后进行常规聚合:
SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;
答案 3 :(得分:2)
我喜欢西蒙和彼得的答案,但我不能同时选择两者。我将2结合起来做了一个更清晰的查询,只返回了流行的小时(我不需要计数)。
SELECT hour(date_created) AS h
FROM my_table
GROUP BY h
ORDER BY count(*) DESC
LIMIT 1
答案 4 :(得分:0)
你可以试试这个:
SELECT
DATE_FORMAT(date,'%H') as hours,
count(*) as count
FROM
myTable
GROUP BY
hours
ORDER BY
count DESC