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_datey:end_date, que definen el rango de fechas para el informe. Ambos parámetros de fecha aceptan el formato de fechaYYYY-MM-DD.
- La consulta acepta dos parámetros,
- Selección y recuento:
DATE(created_at)convierte la marca de tiempocreated_ata formato de fecha y la etiqueta comoday. 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 comonotifications_count.
- Criterios de filtrado:
- La consulta filtra solo aquellas entradas donde el
archetypees'private_message', asegurando que solo estamos viendo mensajes y no otros tipos de temas. - El
subtypese 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_atdel mensaje esté entre:start_datey:end_dateespecificados. - 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.
- La consulta filtra solo aquellas entradas donde el
- 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.
- La consulta utiliza
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 |