这是帖子仪表板报告的 SQL 版本。
本报告提供指定日期范围内创建的帖子的每日计数。它旨在跟踪常规主题中的活动,不包括来自私人消息和其他特殊原型的帖子。
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date AS "Day",
COUNT(p.id) AS "Count"
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.deleted_at ISNULL
AND t.archetype = 'regular'
AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1
SQL 查询说明
- 参数:
- 查询接受两个参数
:start_date和:end_date,它们定义了报告的日期范围。两个日期参数都接受YYYY-MM-DD的日期格式。
- 查询接受两个参数
SQL 查询执行以下操作:
- 数据选择:
- 它选择每个帖子创建的日期 (
created_at::date),并将其转换为日期格式以忽略时间部分。 - 它还计算每天创建的帖子数量 (
COUNT(p.id))。
- 它选择每个帖子创建的日期 (
- 连接:
- 查询使用
INNER JOIN将posts表与topics表连接起来。此连接确保仅考虑与现有主题关联的帖子。 - 它会过滤掉任何已删除的主题 (
t.deleted_at ISNULL)。
- 查询使用
- 筛选:
- 它筛选帖子,仅包括指定日期范围内的帖子 (
p.created_at::date BETWEEN :start_date AND :end_date)。 - 它排除已删除的帖子 (
p.deleted_at ISNULL)。 - 它将结果限制为来自常规主题的帖子 (
t.archetype = 'regular')。 - 它仅考虑
p.post_type = 1的帖子,排除版主操作、耳语和 small_action 帖子。
- 它筛选帖子,仅包括指定日期范围内的帖子 (
- 分组和排序:
- 结果按帖子创建日期分组 (
GROUP BY p.created_at::date)。 - 最终输出按日期升序排序 (
ORDER BY 1),其中1指的是SELECT语句中的第一列,即日期。
- 结果按帖子创建日期分组 (
示例结果
| Day | Count |
|---|---|
| 2023-11-12 | 25 |
| 2023-11-13 | 35 |
| 2023-11-14 | 38 |
| 2023-11-15 | 47 |
| 2023-11-16 | 36 |
| 2023-11-17 | 79 |
| … | … |