Frequentemente, você vai querer extrair dados para um período de tempo específico. Você pode fazer isso codificando seu período de tempo diretamente na consulta, mas para tornar seu relatório mais à prova de futuro, você pode adicionar um parâmetro de data:
Esta consulta foi projetada para contar o número total de postagens em cada categoria (excluindo postagens e tópicos excluídos, mensagens privadas e tópicos sem categoria) que foram criadas dentro de um determinado intervalo de datas e, em seguida, ordenar as categorias pelo número total de postagens em ordem decrescente.
-- [params]
-- date :start_date -- Este é um parâmetro para a data de início do intervalo
-- date :end_date -- Este é um parâmetro para a data de término do intervalo
SELECT
t.category_id,
COUNT(p.id) AS "Total Posts" -- Conta o número de postagens em cada categoria
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date BETWEEN :start_date AND :end_date -- Filtra postagens criadas entre a data de início e a data de término (::date converte o timestamp created_at para data)
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
Usar o estilo de parâmetro date em vez de string torna a inserção do valor do parâmetro muito mais intuitiva, especialmente quando compartilhado com outras pessoas.
Outra dica notável para este tipo de consulta é converter o created_at para data. Como o valor é armazenado no banco de dados como um timestamp, se você não o converter para data, a consulta não capturará os resultados da data do próprio :end_date.
Você pode verificar quais valores são armazenados como timestamps usando a árvore do Explorer:
Esta consulta é principalmente um exemplo para demonstrar os princípios. Espero que você a considere útil, mas se tiver alguma dúvida, por favor, pergunte abaixo. ![]()
