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_datee:end_dateno formatoAAAA-MM-DD, com valores padrão - Um
:category_idopcional para filtrar por categoria específica
- Os parâmetros
- Expressão de Tabela Comum (CTE): Utiliza uma CTE chamada
daily_solutionspara organizar a lógica - Joins:
posts- Garante que o post da solução ainda existe e não foi excluídotopics- Garante que o tópico existe, não é uma mensagem privada e não foi excluídousers- 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 |
| … | … |