Pregunta

Considere la siguiente tabla que tiene los campos: id (int) y 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

Quiero saber la hora más ocupada/más popular del día para este conjunto de datos.En este ejemplo, el resultado que busco sería 12.

¿Ideas?

¿Fue útil?

Solución 4

Me gustan las dos respuestas Simón y Pedro, pero no puedo seleccionar tanto como aceptada. Combiné el 2 para hacer una consulta más limpio que sólo devolvió la hora populares (que no necesito las cuentas).

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

Otros consejos

Para obtener solo la hora más popular, utilice 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;

Si quieres ver todos los datos, ve con 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;

Si quieres algo un poco más flexible, tal vez a la media hora, o un cuarto de hora, puede hacer lo siguiente:

SELECT floor(time_to_sec(date_created)/3600),count(*) AS period 
FROM table GROUP BY period ORDER BY c DESC

Si desea que el intervalo más popular de 2 horas, utilice 7200. El intervalo más popular de 15 minutos, use 900. Sólo tiene que recordar que se trata de segundos (3600 segundos en una hora).

Utilice la función hour() para extraer la hora, y luego hacer la agregación de costumbre:

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

Usted podría intentar esto:

SELECT 
  DATE_FORMAT(date,'%H') as hours, 
  count(*) as count 
FROM 
  myTable 
GROUP BY 
  hours 
ORDER BY 
  count DESC
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top