每个日期的项目数,日期中没有间隙

时间:2009-11-23 15:13:04

标签: sql sql-server sql-server-2000

我有一个网站帖子表,每个条目都有自己的创建日期。

我想返回一个表格,如:

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

但我很难找到合适的SQL。我可以轻松获得按日期分组的帖子数量,但这并不会返回没有帖子的日期(例如,它错过了17-11-2009)。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

一个简单的诀窍就是让一张表中包含你需要的所有日期......然后在这个表和带有帖子的表之间使用外连接

如果我记得它,那么joe celko会为假期计算和al。

提供类似的建议