Este es una versión SQL del Informe del Panel para Soluciones Aceptadas.
Este informe proporciona un recuento de las publicaciones que se han marcado como soluciones a diario dentro de un rango de fechas especificado. Es útil para comprender con qué frecuencia los usuarios encuentran respuestas a sus preguntas y las marcan como soluciones a lo largo del tiempo.
-- [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
Explicación de la consulta SQL
Esta consulta utiliza la tabla discourse_solved_solved_topics introducida en el PR #352 de discourse-solved:
- Parámetros: La consulta acepta:
- Parámetros
:start_datey:end_dateen formatoYYYY-MM-DDcon valores predeterminados. - Un
:category_idopcional para filtrar por categoría específica.
- Parámetros
- Expresión Común de Tabla (CTE): 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é eliminada.topics- Asegura que el tema exista, no sea un mensaje privado y no esté eliminado.users- 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 silenciados ni suspendidos.
- Permite el filtrado opcional por categoría.
- Agrupación y Ordenación: Agrupa por fecha y ordena cronológicamente.
El resultado de esta consulta será una lista de fechas con el recuento correspondiente de publicaciones marcadas como soluciones en cada una de esas fechas.
Ejemplo de Resultados
| día | accepted_solutions |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |