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

发布于 2024-08-12 00:36:07 字数 285 浏览 3 评论 0原文

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

我想返回一个像这样的表:

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

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

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

I have a table of posts to a website, where each entry has its creation date.

I want to return a table like:

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

But I'm struggling to find the right SQL. I can easily get a count of posts grouped by date, but this doesn't return the dates when there are no posts (eg it misses out 17-11-2009).

Is there some SQL that will give me what I want? Or should I use some non-SQL code to deal with the days with no posts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦纸 2024-08-19 00:36:07
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)
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)
刘备忘录 2024-08-19 00:36:07

一个简单的技巧是有一个表,其中包含您需要的所有日期......然后在该表和带有帖子的表之间使用外连接,

如果我没记错的话,joe celko 建议类似的假期计算等。

A simple trick is to have a table with all the dates you need in it ... and then use an outer join between this table and the one with posts

If I remember it right joe celko advise something like that for holidays calculations and al.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文