SQL é notoriamente ruim em retornar dados que não estão no banco de dados. Você pode encontrar os valores iniciais e finais para lacunas de datas, mas conseguir todas as datas é difícil.
A solução é criar uma tabela de calendário com um registro para cada data e OUTER JOIN para sua consulta.
Aqui está um exemplo assumindo que created_at é do 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
(Acho que created_at é realmente DATETIME, então você terá que fazer um pouco mais de ginástica para se juntar às mesas).