Nombre d'articles par date, sans intervalle dans les dates

J'ai un tableau de messages sur un site Web, où chaque input a sa date de création.

Je veux returnner une table comme:

Date Posts 16-11-2009 5 17-11-2009 0 18-11-2009 4 etc 

Mais j'ai du mal à find le bon SQL. Je peux facilement get le nombre de messages regroupés par date, mais cela ne returnne pas les dates quand il n'y a pas de messages (par exemple, il manque le 17-11-2009).

Y a-t-il un SQL qui me donnera ce que je veux? Ou devrais-je utiliser du code non-SQL pour gérer les jours sans messages?

 WITH dates AS ( SELECT CAST('2009-01-01' AS DATETIME) AS d UNION ALL SELECT DATEADD(day, 1, d) FROM dates WHERE d <= GETDATE() ) SELECT d, COUNT(posts.id) FROM dates LEFT JOIN posts ON posts.date >= d AND posts.date < DATEADD(day, 1, d) GROUP BY d OPTION (MAXRECURSION 0) 

Une astuce simple est d'avoir une table avec toutes les dates dont vous avez besoin … puis d'utiliser une jointure externe entre cette table et celle avec les poteaux

Si je me souviens bien joe celko conseille quelque chose comme ça pour les calculs de vacances et al.