MySQL:¿Obtener la hora "más ocupada" o "más popular" de un campo de fecha y hora?
-
20-09-2019 - |
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?
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