Aby poradzić sobie z datami z 0 odpowiadającymi rekordami, moją normalną praktyką jest używanie tabeli kalendarza do dołączania.
Na przykład utwórz tabelę z jednym polem o nazwie calendar_date
i wypełnij go każdą datą od 1st Jan 2000
do 31st Dec 2070
lub inny zakres, który odpowiada Twoim celom raportowania.
Następnie użyj czegoś takiego jak...
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
Ta tabela może mieć wiele dodatkowych zastosowań, takich jak oznaczanie świąt państwowych, początek tygodnia i miesiąca. Dzięki ostrożnemu używaniu flag i indeksów możesz wiele z tego uzyskać.