Eu tive uma pergunta semelhante:collling-stats-into-time-chunks e tinha respondido muito bem. Em essência, a resposta foi:
Talvez você possa usar a função DATE_FORMAT() e agrupamento. Aqui está um exemplo, espero que você possa se adaptar às suas necessidades precisas.
SELECT
DATE_FORMAT( time, "%H:%i" ),
SUM( bytesIn ),
SUM( bytesOut )
FROM
stats
WHERE
time BETWEEN <start> AND <end>
GROUP BY
DATE_FORMAT( time, "%H:%i" )
Se sua janela de tempo abranger mais de um dia e você usar o formato de exemplo, os dados de dias diferentes serão agregados em intervalos de 'hora do dia'. Se os dados brutos não caírem exatamente na hora, você pode suavizar usando "%H:00".
Agradeço a Martin Clayton pela resposta que me deu.