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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top