SQL jest notorycznie kiepski w zwracaniu danych, których nie ma w bazie danych. Możesz znaleźć początkowe i końcowe wartości dla luk dat, ale znalezienie wszystkich dat jest trudne.
Rozwiązaniem jest utworzenie tabeli kalendarza z jednym rekordem dla każdej daty i OUTER JOIN do zapytania.
Oto przykład zakładający, że created_at to typ DATE:
SELECT calendar_date, COUNT(`id`)
FROM calendar LEFT OUTER JOIN my_table ON calendar.calendar_date = my_table.created_at
GROUP BY calendar_date
(Domyślam się, że created_at to tak naprawdę DATETIME, więc będziesz musiał zrobić trochę więcej gimnastyki, aby DOŁĄCZYĆ do stołów).