ダッシュボードレポート - 承認されたソリューション

これは、解決済み投稿のダッシュボードレポートの 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
「いいね!」 2