I stedet for at gruppere på alle disse felter, en enklere (og hurtigere) løsning (fra her ) kan være:
GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600
Jeg kan ikke forestille mig, at din forespørgsel returnerer de resultater, du ønsker (hvis jeg forstår dine krav korrekt). Jeg forstår dine krav, da du, når der ikke er rækker i en given time, vil beregne summen af alle rækker med time
Der er ingen nem og effektiv måde at gøre dette på i MySQL, som jeg kender til, jeg vil foreslå at oprette en midlertidig tabel med alle mulige grupperingsværdier i det område, du ser på (sandsynligvis med en loop). Du kan sikkert sætte denne tabel op på forhånd i et par år, og eventuelt tilføje rækker efter behov. Så kan du bare gå og slutte dig til dette bord og dit bord.
Hvis du brugte MSSQL, kunne du have brugt en rekursiv CTE, selvom dette sandsynligvis ville have været meget langsomt. Se på dette
eller google "mysql cte" for MySQL-alternativer. Måden at gøre dette med rekursion på er at (venstre) slutte sig til den samme tabel gentagne gange i HOUR = HOUR+1
indtil du får en ikke-NULL værdi, så stop. For hver af disse vil du beregne summen baglæns.