Este es una versión SQL del Informe del Panel para Marcadores.
Este informe del panel proporciona un recuento diario de marcadores creados dentro de un rango de fechas especificado.
-- [params]
-- date :start_date
-- date :end_date
WITH bookmark_counts AS (
SELECT
DATE(bookmarks.created_at) AS bookmark_date,
COUNT(DISTINCT CASE WHEN bookmarkable_type = 'Topic' THEN bookmarks.id END) AS topic_bookmarks,
COUNT(DISTINCT CASE WHEN bookmarkable_type = 'Post' THEN bookmarks.id END) AS post_bookmarks
FROM bookmarks
WHERE bookmarks.created_at::date BETWEEN :start_date AND :end_date
GROUP BY bookmark_date
)
SELECT
bookmark_date,
topic_bookmarks + post_bookmarks AS total_bookmarks,
topic_bookmarks,
post_bookmarks
FROM bookmark_counts
ORDER BY bookmark_date
Explicación de la Consulta SQL
Parámetros
Para generar el informe, necesitas proporcionar dos parámetros: :start_date y :end_date. Estos parámetros definen el rango de fechas para el cual deseas analizar la actividad de marcadores. Ambos parámetros de fecha aceptan el formato de fecha YYYY-MM-DD.
Bookmark_Counts (CTE)
Se utiliza una Expresión Común de Tabla (CTE) llamada bookmark_counts para organizar los datos antes de la selección final. La CTE realiza las siguientes acciones:
- Filtrado de Fechas: Filtra los marcadores por su fecha de creación para incluir solo aquellos creados dentro de las fechas de inicio y fin proporcionadas (
:start_datey:end_date). - Agrupación por Fecha: Agrupa los resultados por la fecha de creación de los marcadores, asegurando que los recuentos se agreguen diariamente.
- Conteo de Marcadores: Cuenta el número de marcadores para temas y publicaciones por separado, utilizando
DISTINCTpara asegurar que cada marcador se cuente solo una vez. Esto se hace utilizando agregación condicional con sentenciasCASE:topic_bookmarkscuenta los marcadores dondebookmarkable_typees ‘Topic’.post_bookmarkscuenta los marcadores dondebookmarkable_typees ‘Post’.
Consulta Principal
Después de que la CTE ha organizado los datos, la sentencia SELECT final recupera las siguientes columnas:
bookmark_date: La fecha para la cual se agregan los recuentos.total_bookmarks: La suma de los marcadores de temas y publicaciones para cada día.topic_bookmarks: El recuento de marcadores para temas para cada día. Ej:
post_bookmarks: El recuento de marcadores para publicaciones para cada día. Ej:
Luego, los resultados se ordenan por bookmark_date para presentar los datos en orden cronológico.
Resultados de Ejemplo
| bookmark_date | total_bookmarks | topic_bookmarks | post_bookmarks |
|---|---|---|---|
| 2023-12-01 | 16 | 1 | 15 |
| 2023-12-02 | 4 | 1 | 3 |
| 2023-12-03 | 8 | 0 | 8 |
| 2023-12-04 | 19 | 9 | 10 |
| 2023-12-05 | 18 | 3 | 15 |
| … | … | … | … |

