这是已接受解决方案的仪表板报告的 SQL 版本。
本报告提供指定日期范围内每天被标记为解决方案的帖子的计数。它有助于了解用户随着时间的推移找到问题答案并将其标记为解决方案的频率。
-- [params]
-- date :start_date = 2025-03-01
-- date :end_date = 2025-04-01
-- null category_id :category_id
WITH daily_solutions AS (
SELECT
DATE(st.created_at) AS solution_date,
COUNT(*) AS solution_count
FROM discourse_solved_solved_topics st
JOIN posts p ON p.id = st.answer_post_id AND p.deleted_at IS NULL
JOIN topics t ON t.id = st.topic_id
AND t.archetype <> 'private_message'
AND t.deleted_at IS NULL
AND (:category_id IS NULL OR t.category_id = :category_id)
JOIN users u ON u.id = p.user_id
WHERE
st.created_at BETWEEN :start_date AND :end_date
AND u.id > 0
AND u.active
AND u.silenced_till IS NULL
AND u.suspended_till IS NULL
GROUP BY DATE(st.created_at)
)
SELECT
solution_date,
solution_count
FROM daily_solutions
ORDER BY solution_date
SQL 查询说明
此查询使用 discourse-solved PR #352 中引入的 discourse_solved_solved_topics 表:
- 参数:查询接受:
- 格式为
YYYY-MM-DD的:start_date和:end_date参数,并带有默认值 - 可选的
:category_id用于按特定类别进行筛选
- 格式为
- 通用表表达式 (CTE):使用名为
daily_solutions的 CTE 来组织逻辑 - 连接 (Joins):
posts- 确保解决方案帖子仍然存在且未被删除topics- 确保主题存在、不是私信且未被删除users- 验证解决方案发布者是有效用户
- 筛选 (Filtering):
WHERE子句:- 限制在指定日期范围内
- 确保用户活跃、未被静默且未被暂停
- 允许可选的类别筛选
- 分组和排序 (Grouping and Ordering):按日期分组并按时间顺序排序
此查询的输出将是一个日期列表,其中包含每个日期被标记为解决方案的帖子的相应计数。
示例结果
| day | accepted_solutions |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |