Informe del panel - Notificar al usuario

Este es una versión SQL del informe del panel para Notify User.

Este informe del panel proporciona un recuento diario del número de veces que los usuarios han sido notificados de forma privada por una marca en una de sus publicaciones.

-- [params]
-- date :start_date = 2023-12-15
-- date :end_date = 2024-01-16

SELECT
  DATE(created_at) AS day,
  COUNT(1) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
  AND subtype = 'notify_user'
  AND created_at BETWEEN :start_date AND :end_date
  AND deleted_at IS NULL
  AND user_id > 0
GROUP BY DATE(created_at)
ORDER BY day

Explicación de la consulta SQL

La consulta funciona extrayendo datos de la tabla topics, específicamente aquellos que califican como mensajes privados para los usuarios con un subtipo de notify_user dentro de un período de tiempo determinado. Desglosemos:

  • Parámetros de fecha:
    • La consulta acepta dos parámetros, :start_date y :end_date, que definen el rango de fechas para el informe. Ambos parámetros de fecha aceptan el formato de fecha YYYY-MM-DD.
  • Selección y recuento:
    • DATE(created_at) convierte la marca de tiempo created_at a formato de fecha y la etiqueta como day. Esto permite agrupar y contar mensajes por el día en que fueron creados.
    • COUNT(1) se utiliza para contar el número de entradas para cada día, etiquetando este recuento como notifications_count.
  • Criterios de filtrado:
    • La consulta filtra solo aquellas entradas donde el archetype es 'private_message', asegurando que solo estamos viendo mensajes y no otros tipos de temas.
    • El subtype se restringe a 'notify_user', aislando los casos en los que los usuarios han sido notificados sobre publicaciones marcadas.
    • Comprueba que la marca de tiempo created_at del mensaje esté entre :start_date y :end_date especificados.
    • Los mensajes que han sido eliminados (deleted_at IS NULL) se excluyen del recuento para garantizar que el informe refleje solo las comunicaciones activas.
    • Finalmente, se asegura de que los mensajes estén asociados con un usuario válido al confirmar user_id > 0.
  • Agrupación y ordenación:
    • La consulta utiliza GROUP BY DATE(created_at) para agregar los resultados por cada día dentro del rango de fechas especificado.
    • Luego ordena los resultados cronológicamente con ORDER BY day, lo que hace que el informe sea fácil de leer e interpretar.

Ejemplo de resultados

day notifications_count
2023-12-17 1
2023-12-18 1
2023-12-21 1
2023-12-23 1
2023-12-26 1
1 me gusta