Esta es una versión en SQL del informe del Panel de Soluciones Aceptadas.
Este informe proporciona un recuento de publicaciones que han sido marcadas como soluciones de forma diaria dentro de un rango de fechas especificado. Es útil para comprender con qué frecuencia los usuarios están encontrando respuestas a sus preguntas y marcándolas como soluciones a lo largo del tiempo.
-- [parámetros]
-- 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
Explicación de la consulta SQL
Esta consulta utiliza la tabla discourse_solved_solved_topics y la tabla discourse_solved_topic_answers, que fue introducida en la PR #39806 de Discourse.
- Parámetros: La consulta acepta:
- Los parámetros
:start_datey:end_dateen formatoAAAA-MM-DDcon valores predeterminados - Un
:category_idopcional para filtrar por categoría específica
- Los parámetros
- Expresión de tabla común: Utiliza una CTE llamada
daily_solutionspara organizar la lógica - Uniones (Joins):
posts- Asegura que la publicación de la solución aún exista y no esté eliminadatopics- Asegura que el tema exista, no sea un mensaje privado y no esté eliminadousers- Verifica que el autor de la solución sea un usuario válido
- Filtrado: La cláusula
WHERE:- Limita al rango de fechas especificado
- Asegura que los usuarios estén activos, no estén silenciados y no estén suspendidos
- Permite el filtrado opcional por categoría
- Agrupación y ordenamiento: Agrupa por fecha y ordena cronológicamente
La salida de esta consulta será una lista de fechas con el recuento correspondiente de publicaciones marcadas como soluciones en cada una de esas fechas.
Resultados de ejemplo
| día | soluciones_aceptadas |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |