Esta es una versión SQL del Informe del Panel para el Sistema.
Este informe del panel proporciona un recuento diario del número de mensajes personales enviados automáticamente por el sistema.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-01-01
SELECT
DATE(created_at) AS day,
COUNT(*) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
AND subtype = 'system_message'
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 a usuarios con un subtipo de system_message 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,
- SELECT: La consulta selecciona dos campos:
DATE(created_at) AS day: Esto extrae la parte de la fecha de la marca de tiempocreated_at, agrupando efectivamente los registros por el día en que fueron creados.COUNT(*) AS notifications_count: Esto cuenta el número total de PM generados por el sistema para cada día.
- FROM: Especifica la tabla
topicscomo la fuente de datos, que contiene registros de todos los temas, incluidos los mensajes privados. - WHERE: Contiene múltiples filtros para reducir el conjunto de datos:
archetype = 'private_message': Solo incluye entradas que son mensajes privados.subtype = 'system_message': Reduce aún más la selección solo a los mensajes generados por el sistema.created_at BETWEEN :start_date AND :end_date: Filtra los PM a aquellos creados dentro del rango especificado por los parámetros.deleted_at IS NULL: Excluye los mensajes que han sido eliminados.user_id > 0: Asegura que los mensajes estén asociados con cuentas de usuario reales en lugar de cuentas del sistema o anónimas.
- GROUP BY: Agrupa los resultados según el día en que fueron creados.
- ORDER BY: Ordena el conjunto de resultados final por el día en orden ascendente, asegurando una secuencia cronológica de los recuentos diarios.
Resultados de ejemplo
| day | notifications_count |
|---|---|
| 2024-01-01 | 5 |
| 2024-01-02 | 7 |
| 2024-01-03 | 11 |
| 2024-01-04 | 14 |
| 2024-01-05 | 8 |