Añadiendo un parámetro de fecha

A menudo querrás extraer datos de un período de tiempo específico. Puedes hacerlo codificando en tu consulta el período de tiempo, pero para que tu informe sea más útil en el futuro, puedes añadir un parámetro de fecha:

Esta consulta está diseñada para contar el número total de publicaciones en cada categoría (excluyendo publicaciones y temas eliminados, mensajes privados y temas sin categoría) que se crearon dentro de un rango de fechas específico, y luego ordenar las categorías por el número total de publicaciones en orden descendente.

-- [params]
-- date :start_date -- Este es un parámetro para la fecha de inicio del rango
-- date :end_date -- Este es un parámetro para la fecha de fin del rango

SELECT
   t.category_id,
   COUNT(p.id) AS "Total Posts" -- Cuenta el número de publicaciones en cada categoría
FROM posts p
  JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date BETWEEN :start_date AND :end_date -- Filtra las publicaciones creadas entre la fecha de inicio y la fecha de fin (::date convierte la marca de tiempo created_at en una fecha)
  AND t.deleted_at IS NULL
  AND p.deleted_at IS NULL
  AND t.archetype <> 'private message'
  AND p.user_id > 0
  AND t.category_id IS NOT NULL
GROUP BY 1
ORDER BY 2 DESC

Utilizar el estilo de parámetro date en lugar de string hace que la introducción del valor del parámetro sea mucho más intuitiva, especialmente cuando se comparte con otras personas.

Otro consejo notable para este tipo de consulta es convertir created_at a fecha. Como el valor se almacena en la base de datos como una marca de tiempo, si no lo conviertes a fecha, la consulta no captará los resultados de la fecha de :end_date en sí.

Puedes comprobar qué valores se almacenan como marcas de tiempo utilizando el árbol del Explorador:

Esta consulta es principalmente un ejemplo para demostrar los principios. Esperamos que te resulte útil, pero si tienes alguna pregunta, por favor, hazla a continuación. :slight_smile:

9 Me gusta
PG::SyntaxError: ERROR:  syntax error at or near ":"
LINE 16: WHERE p.created_at::date BETWEEN :start_date AND :end_date -...

:tired_face:

4 Me gusta

Ah sí, no le gustan esos comentarios en línea junto a los parámetros.

-- [params]
-- date :start_date 
-- date :end_date 

SELECT
   t.category_id,
   COUNT(p.id) AS "Total Posts" -- Cuenta el número de publicaciones en cada categoría
FROM posts p 
  JOIN topics t ON t.id = p.topic_id 
WHERE p.created_at::date BETWEEN :start_date AND :end_date -- Filtra las publicaciones creadas entre la fecha de inicio y la fecha de fin (::date convierte la marca de tiempo created_at en una fecha)
  AND t.deleted_at IS NULL 
  AND p.deleted_at IS NULL 
  AND t.archetype <> 'private message' 
  AND p.user_id > 0
  AND t.category_id IS NOT NULL 
GROUP BY 1 
ORDER BY 2 DESC

Este parece funcionar mejor. :+1: (Es posible que necesites actualizar la página la primera vez para que aparezcan los cuadros de entrada de parámetros)

Gracias por ayudarme a depurar las guías. :slight_smile: :trophy:

7 Me gusta