仪表盘报告 - 主题

这是仪表板主题的 SQL 版本。

此报告提供了指定日期范围内每日创建的新主题的数量。报告不包括私人消息,只包括论坛上可见的常规主题。

--[params]
-- date :start_date
-- date :end_date

SELECT 
     p.created_at::date as day,
    COUNT(p.id) AS topics_created
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.post_number = 1
    AND p.user_id > 0 
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
GROUP BY p.created_at::date
ORDER BY p.created_at::date ASC

SQL 查询说明

SQL 查询执行以下操作:

  • 参数定义:它接受两个参数 :start_date:end_date,它们定义了报告的日期范围。两个日期参数都接受 YYYY-MM-DD 格式。
  • 数据选择:查询选择帖子的创建日期 (p.created_at) 和帖子 ID 的计数 (COUNT(p.id)) 作为 topics_created
  • 连接:它在 posts 表和 topics 表之间通过各自的 id 字段进行连接,确保只考虑未删除的主题 (t.deleted_at ISNULL)。
  • 筛选器:查询筛选帖子,仅包括:
    • 在指定日期范围内创建的帖子 (p.created_at::date BETWEEN :start_date AND :end_date)。
    • 主题的第一个帖子 (p.post_number = 1),表示新主题的开始。
    • 由注册用户创建的帖子 (p.user_id > 0),排除系统帖子。
    • 未被删除的帖子 (p.deleted_at ISNULL)。
    • 属于“regular”类型的帖子 (t.archetype = 'regular'),排除私人消息。
  • 分组:结果按帖子的创建日期 (p.created_at::date) 进行分组。
  • 排序:最终输出按创建日期升序排序 (ORDER BY p.created_at::date ASC),提供新主题创建的按时间顺序的视图。

示例结果

day topics_created
2023-11-11 18
2023-11-12 10
2023-11-13 21
2023-11-14 19
2023-11-15 22
4 个赞