Bueno, es bastante simple: Como la columna fecha_hora se supone que contiene tanto la fecha como la hora del ingreso, la respuesta es agrupar por esa columna, como te dije, pero aplicando la función HOUR() sobre ese dato:
Esto devuelve el resultado agrupado por horas, en función del primer registro encontrado con cada hora distinta. Para ordenarlos de mayor a menor habría que ordenar además por Cantidad_ingresos:
Ahora bien, si sólo quieres la hora mayor, necesitaríamos usar LIMIT para que nos devuelva sólo el primer resultado. Eso es evidente.
Pero hay un problema: el LIMIT usado en una consulta con GROUP BY no necesariamente devuelve el resultado esperado porque su implementación tiene algunos detalles que son complejos de explicar. Lo que hace es leer, agrupar,
aplicar el límite y
luego ordenar, lo que causará que si el mayor no está en el limite encontrado, el ordenamiento de mayor a menor sea erroneo porque suprimirá registros que necesitas.
Esto puede parecer raro, pero hay razones por las cuales la lógica usada en la implementación sea esa. No vienen al caso.
Como sea, lo mejor para resolver el problema es hacer que toda esta consulta se transforme en subconsulta, y usar el LIMIT en la exterior:
Código MySQL:
Ver original id_lab, Hora_Ingreso, Cantidad_ingresos
id_lab
, HOUR(fecha_hora
) Hora_Ingreso
, COUNT(*) Cantidad_ingresos
Eso debería funcionar.