これは、解決済み投稿のダッシュボードレポートの 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(ta.created_at) AS solution_date,
COUNT(*) AS solution_count
FROM discourse_solved_solved_topics st
JOIN discourse_solved_topic_answers ta ON ta.solved_topic_id = st.id
JOIN posts p ON p.id = ta.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(ta.created_at)
)
SELECT
solution_date,
solution_count
FROM daily_solutions
ORDER BY solution_date
SQL クエリの説明
このクエリは、Discourse PR #39806 で導入された discourse_solved_solved_topics テーブルと discourse_solved_topic_answers テーブルを使用します。
- パラメータ: クエリは以下を受け付けます:
:start_dateおよび:end_dateパラメータ(YYYY-MM-DD形式、デフォルト値付き)- 特定のカテゴリでフィルタリングするためのオプションの
:category_id
- 共通テーブル式: ロジックを整理するために
daily_solutionsという名前の CTE を使用 - 結合:
posts- 解決投稿が存在し、削除されていないことを確認topics- トピックが存在し、プライベートメッセージではなく、削除されていないことを確認users- 解決を投稿したユーザーが有効なユーザーであることを確認
- フィルタリング:
WHERE句は以下を行います:- 指定された日付範囲に限定
- ユーザーがアクティブで、沈黙されておらず、停止されていないことを確認
- オプションのカテゴリフィルタリングを許可
- グループ化とソート: 日付でグループ化し、時系列順にソート
このクエリの出力は、各日付にマークされた解決済み投稿の対応する数を含む日付のリストになります。
結果の例
| day | accepted_solutions |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |