Informe del panel: soluciones aceptadas

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_date y :end_date en formato AAAA-MM-DD con valores predeterminados
    • Un :category_id opcional para filtrar por categoría específica
  • Expresión de tabla común: 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 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
2 Me gusta