sql - 每个日期的项目计数,日期之间没有间隙

标签 sql sql-server sql-server-2000

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

我想返回一个表格,例如:

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

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

有一些 SQL 可以给我我想要的吗?或者我应该使用一些非 SQL 代码来处理没有帖子的日子?

最佳答案

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)

关于sql - 每个日期的项目计数,日期之间没有间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1783733/

相关文章:

sql - 使用 SQL 检查 IP 地址并将其映射到子网查找表

MySQL:将一个文件的数据插入到两张表中,一张带有auto_increment id,一张连接表

sql-server - SQL Server 查询以展平记录的层次结构

sql - 如何将此查询转换为 SQL Server 2000 语法

SQL Server 2000 相当于 GROUP_CONCAT 函数

SQL DISTINCT 不会删除重复项

sql - 删除行后如何对 id 列重新排序(不是自动递增)

sql - 如果不等于,则仅获取一行

sql - 如果主 SQL Server 关闭,则连接到辅助 SQL Server

sql - 从 SQL 数据库加载某些数据缓慢