Con respecto a agrupar por rangos... hace tiempo tuve necesidad de hacer algo por el estilo... en ese entonces se requería agrupar la información por horas... para esto, simplemente utilizamos DATE_FORMAT para eliminar los minutos y segundos... es decir, hicimos algo como esto:
Código MySQL:
Ver original+----------+-------+---------------------+
| atributo | Valor | FechaHora |
+----------+-------+---------------------+
| Media | 10.0 | 2012-06-18 17:40:00 |
| Media | 20.0 | 2012-06-18 17:40:12 |
| Media | 30.0 | 2012-06-18 17:45:34 |
| Media | 40.0 | 2012-06-18 18:00:00 |
| Media | 50.0 | 2012-06-18 18:59:59 |
+----------+-------+---------------------+
-> fechaHora,
+---------------------+---------------------------------------------+
| fechaHora
| DATE_FORMAT(fechaHora
, '%Y-%m-%d %H:00:00') | +---------------------+---------------------------------------------+
| 2012-06-18 17:40:00 | 2012-06-18 17:00:00 |
| 2012-06-18 17:40:12 | 2012-06-18 17:00:00 |
| 2012-06-18 17:45:34 | 2012-06-18 17:00:00 |
| 2012-06-18 18:00:00 | 2012-06-18 18:00:00 |
| 2012-06-18 18:59:59 | 2012-06-18 18:00:00 |
+---------------------+---------------------------------------------+
-> atributo,
+----------+---------------------------------------------+------+
| atributo
| DATE_FORMAT(fechaHora
, '%Y-%m-%d %H:00:00') | suma
| +----------+---------------------------------------------+------+
| Media | 2012-06-18 17:00:00 | 60.0 |
| Media | 2012-06-18 18:00:00 | 90.0 |
+----------+---------------------------------------------+------+
Otra opción, sería crear una tabla de los intervalos que necesites... checa este post que contesté hace algunos días, se presenta algo como lo que quieres hacer.
http://www.forosdelweb.com/f86/probl...nsulta-999782/
Saludos
Leo.