En lugar de agrupar en todos esos campos, una solución más simple (y más rápida) (de aquí ) puede ser:
GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600
No puedo imaginar que su consulta devuelva los resultados que desea (si entiendo sus requisitos correctamente). Entiendo sus requisitos ya que, cuando no hay filas para una hora determinada, desea calcular la suma de todas las filas con hora
Que yo sepa, no hay una manera fácil y eficiente de hacer esto en MySQL, sugeriría crear una tabla temporal con todos los valores de agrupación posibles en el rango que está mirando (probablemente con un bucle). Probablemente pueda configurar esta tabla de antemano durante algunos años y posiblemente agregar filas según sea necesario. Entonces puedes simplemente unirte a esta mesa y a tu mesa.
Si estuviera usando MSSQL, podría haber usado un CTE recursivo, aunque esto probablemente habría sido muy lento. Mire esto
o google "mysql cte" para alternativas de MySQL. La forma de hacer esto con la recursividad es (izquierda) unirse en la misma tabla repetidamente durante HOUR = HOUR+1
hasta que obtenga un valor no NULL, luego deténgase. Para cada uno de estos, calculará la suma al revés.