Creo que solo desea establecer las horas en 5, para ser coherente con su rango. Si es así, puedes hacer esto:
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)
Pero, creo que en realidad podrías querer expresar esto de manera un poco diferente:
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)
Esto realmente realinea las fechas en el límite de 5 horas.
Nota:estas consultas no se han probado, por lo que pueden contener errores de sintaxis.
Esto supone que la marca de tiempo es realmente una fecha y hora. Si es una marca de tiempo UNIX, primero debe convertirla.