MySQL: Ficando a hora “mais movimentada” ou “mais popular” de um campo DateTime?
-
20-09-2019 - |
Pergunta
Considere a tabela a seguir que possui os campos - id (int) e 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
Quero saber a hora mais movimentada/mais popular do dia para este conjunto de dados. Neste exemplo, o resultado que estou procurando seria de 12.
Ideias?
Solução 4
Gosto das respostas de Simon e Peter, mas não posso selecionar os dois como aceitos. Combinei o 2 para fazer uma consulta mais limpa que retornou apenas a hora popular (não preciso da contagem).
SELECT hour(date_created) AS h
FROM my_table
GROUP BY h
ORDER BY count(*) DESC
LIMIT 1
Outras dicas
Para obter a hora mais popular, use esta consulta
select date_format( date_created, '%H' ) as `hour`
from [Table]
group by date_format( date_created, '%H' )
order by count(*) desc
limit 1;
Se você quiser olhar para todos os dados, vá com este
select count(*) as num_records
, date_created
, date_format( date_created, '%H' ) as `hour`
from [Table]
group by `hour`
order by num_records desc;
Se você quiser algo um pouco mais flexível, talvez até meia hora ou quarto de hora, você pode fazer o seguinte:
SELECT floor(time_to_sec(date_created)/3600),count(*) AS period
FROM table GROUP BY period ORDER BY c DESC
Se você deseja o intervalo de 2 horas mais popular, use 7200. O intervalo de 15 minutos mais popular, use 900. Você só precisa se lembrar de lidar com segundos (3600 segundos em uma hora).
Use o hour()
Função para extrair a hora e faça a agregação usual:
SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;
Você poderia tentar o seguinte:
SELECT
DATE_FORMAT(date,'%H') as hours,
count(*) as count
FROM
myTable
GROUP BY
hours
ORDER BY
count DESC