2010-03-18 1 views
4

Рассмотрим следующую таблицу, которая имеет поля - идентификатор (INT) и DATE_CREATED (DateTime):MySQL: «Самый загруженный» или «самый популярный» час из поля 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.

Идеи?

ответ

2

Мне нравятся ответы Саймона и Питера, но я не могу выбрать их как принято. Я объединил 2, чтобы сделать более чистый запрос, который только вернул популярный час (мне не нужны подсчеты).

SELECT hour(date_created) AS h 
FROM my_table 
GROUP BY h 
ORDER BY count(*) DESC 
LIMIT 1 
2

Используйте функцию hour() извлечь час, затем сделать обычную агрегацию:

SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;

0

Вы можете попробовать это:

SELECT 
    DATE_FORMAT(date,'%H') as hours, 
    count(*) as count 
FROM 
    myTable 
GROUP BY 
    hours 
ORDER BY 
    count DESC 
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; 
+0

Любое преимущество использования date_format() через час() или наоборот? – k00k

+0

Нет, я так не думаю. Это была только функция, с которой я уже был знаком с моей головы. –

+0

По той же причине я использовал час(). – Simon

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 секунд в час).

+0

Это вызывает ошибку, поскольку интервал является функцией сравнения (http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_interval). Изменение интервала слов в foo работает, но результаты неверны. – k00k

+0

конечно, забудьте о промежутке. Я оставил счет, так что он не мог правильно его заказать (кричит). –

+0

Еще есть ошибка – k00k

Смежные вопросы