Relatório do Painel - Soluções Aceitas

Este é um relatório de painel em SQL para Soluções Aceitas.

Este relatório fornece uma contagem de postagens que foram marcadas como soluções diariamente dentro de um intervalo de datas especificado. É útil para entender com que frequência os usuários encontram respostas para suas perguntas e as marcam 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(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

Explicação da consulta SQL

Esta consulta usa a tabela discourse_solved_solved_topics introduzida no PR #352 do discourse-solved:

  • Parâmetros: A consulta aceita:
    • Parâmetros :start_date e :end_date no formato YYYY-MM-DD com valores padrão
    • Um :category_id opcional para filtrar por categoria específica
  • Expressão de Tabela Comum: Usa uma CTE chamada daily_solutions para organizar a lógica
  • Junções:
    • posts - Garante que a postagem da solução ainda exista e não tenha sido excluída
    • topics - Garante que o tópico exista, não seja uma mensagem privada e não tenha sido 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 estejam ativos, não silenciados e não suspensos
    • Permite filtragem opcional por categoria
  • Agrupamento e Ordenação: Agrupa por data e ordena cronologicamente

O resultado desta consulta será uma lista de datas com a contagem correspondente de postagens marcadas como soluções em cada uma dessas datas.

Exemplo de Resultados

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