2009-11-23 33 views
2

我有一个网站的职位表,其中每个条目都有其创建日期。每个日期的项目数,在日期间没有差距

我要回表所示:

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

但我在努力寻找正确的SQL。我可以轻松获得按日期分组的帖子,但这并不会返回没有帖子的日期(例如17-11-2009错过)。

是否有一些SQL会给我想要的东西?或者我应该使用一些非SQL代码来处理没有帖子的日子?

回答

3
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) 
0

一个简单的窍门是有一个表,你在它需要的所有日期...然后使用一个外连接此表和一个与职位

之间。如果我记得正确乔凯尔科提醒类似的假期计算和铝。