SQL è notoriamente inadeguato nel restituire dati che non sono nel database. Puoi trovare i valori di inizio e fine per gap di date, ma ottenere tutte le date è difficile.
La soluzione è creare una tabella del calendario con un record per ogni data e COLLEGARE OUTER alla tua query.
Ecco un esempio supponendo che create_at sia di tipo 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
(Immagino che create_at sia davvero DATETIME, quindi dovrai fare un po' più di ginnastica per UNIRTI ai tavoli).