Tôi nghĩ bạn chỉ muốn đặt giờ thành 5, để phù hợp với phạm vi của bạn. Nếu vậy, bạn có thể làm điều này:
SELECT cast(date(stamp) as datetime) + interval 5 hour
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp)
Nhưng, tôi nghĩ bạn có thể thực sự muốn diễn đạt điều này hơi khác một chút:
SELECT cast(date(stamp - interval 5 hour) as datetime) + interval 5 hour
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp - interval 5 hour)
Điều này thực sự sắp xếp lại các ngày trên ranh giới 5 giờ.
Lưu ý:các truy vấn này chưa được kiểm tra, do đó có thể có lỗi cú pháp.
Điều này giả định rằng dấu thời gian thực sự là một ngày giờ. Nếu đó là dấu thời gian UNIX, trước tiên bạn cần chuyển đổi nó.