这是仪表板主题的 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 |
| … | … |