Relatório do Painel - Soluções Aceitas

Esta é uma versão SQL do Relatório do Painel para Soluções Aceitas.

Este relatório fornece uma contagem de posts marcados como soluções diariamente, dentro de um intervalo de datas especificado. É útil para entender com que frequência os usuários estão encontrando respostas para suas perguntas e marcando-as como soluções ao longo do tempo.

-- [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

Explicação da consulta SQL

Esta consulta utiliza as tabelas discourse_solved_solved_topics e discourse_solved_topic_answers, que foi introduzida no Discourse PR #39806.

  • Parâmetros: A consulta aceita:
    • Os parâmetros :start_date e :end_date no formato AAAA-MM-DD, com valores padrão
    • Um :category_id opcional para filtrar por categoria específica
  • Expressão de Tabela Comum (CTE): Utiliza uma CTE chamada daily_solutions para organizar a lógica
  • Joins:
    • posts - Garante que o post da solução ainda existe e não foi excluído
    • topics - Garante que o tópico existe, não é uma mensagem privada e não foi excluído
    • users - Verifica se o autor da solução é um usuário válido
  • Filtragem: A cláusula WHERE:
    • Limita ao intervalo de datas especificado
    • Garante que os usuários estão ativos, não silenciados e não suspensos
    • Permite filtragem opcional por categoria
  • Agrupamento e Ordenação: Agrupa por data e ordena cronologicamente

A saída desta consulta será uma lista de datas com a contagem correspondente de posts marcados como soluções em cada uma dessas datas.

Resultados de Exemplo

dia soluções_aceitas
2023-11-14 16
2023-11-15 5
2023-11-16 10
2023-11-17 4
2023-11-18 2
2 curtidas