Thay vì nhóm trên tất cả các trường đó, một giải pháp đơn giản hơn (và nhanh hơn) (từ tại đây ) có thể là:
GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600
Tôi không thể tưởng tượng rằng truy vấn của bạn trả về kết quả bạn muốn (nếu tôi hiểu đúng yêu cầu của bạn). Tôi hiểu yêu cầu của bạn là khi không có hàng nào trong một giờ nhất định, bạn muốn tính tổng của tất cả các hàng có giờ
Không có cách nào hiệu quả dễ dàng để thực hiện điều này trong MySQL mà tôi biết, tôi khuyên bạn nên tạo một bảng tạm thời với tất cả các giá trị nhóm có thể có trong phạm vi mà bạn đang xem xét (có thể là với một vòng lặp). Bạn có thể thiết lập bảng này trước trong vài năm và có thể thêm các hàng theo yêu cầu. Sau đó, bạn có thể rời khỏi tham gia bảng này và bảng của mình.
Nếu bạn đang sử dụng MSSQL, bạn có thể đã sử dụng CTE đệ quy, mặc dù điều này có thể rất chậm. Xem cái này
hoặc google "mysql cte" cho các lựa chọn thay thế MySQL. Cách thực hiện điều này với đệ quy là (trái) tham gia lặp lại trên cùng một bảng trong HOUR = HOUR+1
cho đến khi bạn nhận được giá trị không phải NULL, sau đó dừng lại. Đối với mỗi cái này, bạn sẽ tính tổng ngược lại.