Zamiast grupować we wszystkich tych polach, prostsze (i szybsze) rozwiązanie (od tutaj ) może być:
GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600
Nie wyobrażam sobie, aby Twoje zapytanie zwróciło oczekiwane wyniki (jeśli dobrze rozumiem Twoje wymagania). Rozumiem Twoje wymagania, ponieważ gdy nie ma wierszy dla danej godziny, chcesz obliczyć sumę wszystkich wierszy z godziną
Nie ma łatwego, wydajnego sposobu na zrobienie tego w MySQL, o którym wiem, sugerowałbym utworzenie tymczasowej tabeli ze wszystkimi możliwymi wartościami grupowania w zakresie, na który patrzysz (prawdopodobnie z pętlą). Prawdopodobnie możesz ustawić tę tabelę z wyprzedzeniem na kilka lat i ewentualnie dodać wiersze zgodnie z wymaganiami. Następnie możesz po prostu odejść do tego stołu i swojego stołu.
Gdybyś używał MSSQL, mógłbyś użyć rekurencyjnego CTE, choć prawdopodobnie byłoby to bardzo powolne. Spójrz na to
lub google "mysql cte" dla alternatyw MySQL. Sposobem na zrobienie tego z rekurencją jest (po lewej) wielokrotne dołączanie do tej samej tabeli przez HOUR = HOUR+1
dopóki nie uzyskasz wartości innej niż NULL, a następnie zatrzymaj się. Dla każdego z nich obliczysz sumę wstecz.