Hola Mega0079:
Mucho ojo, los rangos que estás manejando NO SON MUTUAMENTE EXCLUYENTES, debes manejar condiciones tipo >= o en su defecto cambiar los valores de referencia... Hace tiempo me tocó hacer algo parecido aquí en el trabajo. La solución por la que optamos fue crear una tabla catálogo con los intervalos que nos interesaban, especificando los límites inferior y superior para cada caso. Una vez que tuvimos esta tabla, sólo tuvimos que hacer un INNER JOIN y una agrupación, es decir, sería algo como esto:
Código MySQL:
Ver original+--------+----------+----------+
| llamid | telefono | hora |
+--------+----------+----------+
| 1 | 55555 | 10:30:00 |
| 2 | 55555 | 10:20:00 |
| 3 | 55555 | 10:25:00 |
| 4 | 55555 | 11:30:00 |
| 5 | 55555 | 11:20:00 |
| 6 | 55555 | 11:25:00 |
+--------+----------+----------+
+-------------+-----------+-----------+
| intervaloId | limiteInf | limiteSup |
+-------------+-----------+-----------+
| 1 | 10:00:00 | 10:29:59 |
| 2 | 10:30:00 | 10:59:59 |
| 3 | 11:00:00 | 11:29:59 |
| 4 | 11:30:00 | 11:59:59 |
+-------------+-----------+-----------+
+-----------+-----------+-------+
| limiteInf | limiteSup | total |
+-----------+-----------+-------+
| 10:00:00 | 10:29:59 | 2 |
| 10:30:00 | 10:59:59 | 1 |
| 11:00:00 | 11:29:59 | 2 |
| 11:30:00 | 11:59:59 | 1 |
+-----------+-----------+-------+
Observa que los valores de la tabla SI SON MUTUAMENTE EXCLUYENTES (es decir, no se mezclan intervalos en más de una categoría). La consulta te regresaría el total de llamadas para cada intervalo...
Saludos
Leo.