Para manejar fechas con 0 registros correspondientes, mi práctica normal es usar una tabla de calendario para unirme.
Por ejemplo, cree una tabla con un campo llamado calendar_date
y rellénelo con cada fecha desde 1st Jan 2000
al 31st Dec 2070
, o algún otro rango que se adapte a sus propósitos de informes.
Luego usa algo como...
SELECT
calendar.calendar_date,
COUNT(*)
FROM
calendar
LEFT JOIN
yourData
ON yourData.timeStamp >= calendar.calendar_date
AND yourData.timeStamp < calendar.calendar_date + 1
WHERE
calendar.calendar_date >= '01 Jan 2012'
AND calendar.calendar_date < '04 Jan 2012'
GROUP BY
calendar.calendar_date
Esta tabla puede tener muchos usos adicionales, como marcar días festivos, comienzos de semanas y meses. Con usos prudentes de banderas e índices, puede sacarle mucho provecho.