Daripada mengelompokkan semua bidang itu, solusi yang lebih sederhana (dan lebih cepat) (dari di sini ) mungkin:
GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600
Saya tidak dapat membayangkan bahwa kueri Anda mengembalikan hasil yang Anda inginkan (jika saya memahami persyaratan Anda dengan benar). Saya memahami persyaratan Anda karena, ketika tidak ada baris untuk jam tertentu, Anda ingin menghitung jumlah semua baris dengan jam
Tidak ada cara efisien yang mudah untuk melakukan ini di MySQL yang saya tahu, saya sarankan membuat tabel sementara dengan semua kemungkinan nilai pengelompokan dalam rentang yang Anda lihat (mungkin dengan satu lingkaran). Anda mungkin dapat mengatur tabel ini sebelumnya selama beberapa tahun, dan mungkin menambahkan baris sesuai kebutuhan. Kemudian Anda bisa pergi bergabung dengan tabel ini dan meja Anda.
Jika Anda menggunakan MSSQL, Anda bisa menggunakan CTE rekursif, meskipun ini mungkin akan sangat lambat. Lihat ini
atau google "mysql cte" untuk alternatif MySQL. Cara melakukan ini dengan rekursi adalah (kiri) bergabung pada tabel yang sama berulang kali selama HOUR = HOUR+1
sampai Anda mendapatkan nilai non-NULL, lalu berhenti. Untuk masing-masingnya, Anda akan menghitung jumlahnya secara terbalik.