Informe del panel - Soluciones aceptadas

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_date y :end_date en formato YYYY-MM-DD con valores predeterminados.
    • Un :category_id opcional para filtrar por categoría específica.
  • Expresión Común de Tabla (CTE): Utiliza una CTE llamada daily_solutions para 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
2 Me gusta