Relatório do Painel - Tópicos

Este é um relatório de painel em SQL para tópicos.

Este relatório fornece uma contagem de novos tópicos criados diariamente dentro de um intervalo de datas especificado. O relatório não inclui mensagens pessoais, apenas tópicos regulares que são visíveis no fórum.

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

SELECT 
     p.created_at::date as day,
    COUNT(p.id) AS topics_created
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.post_number = 1
    AND p.user_id > 0 
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
GROUP BY p.created_at::date
ORDER BY p.created_at::date ASC

Explicação da Consulta SQL

A consulta SQL executa as seguintes ações:

  • Definição de Parâmetros: Aceita dois parâmetros, :start_date e :end_date, que definem o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato AAAA-MM-DD.
  • Seleção de Dados: A consulta seleciona a data de criação das postagens (p.created_at) e a contagem de IDs de postagem (COUNT(p.id)) como topics_created.
  • Junções: Ela une a tabela posts com a tabela topics em seus respectivos campos id, garantindo que apenas tópicos não excluídos (t.deleted_at ISNULL) sejam considerados.
  • Filtros: A consulta filtra as postagens para incluir apenas aquelas que:
    • Foram criadas dentro do intervalo de datas especificado (p.created_at::date BETWEEN :start_date AND :end_date).
    • São a primeira postagem em um tópico (p.post_number = 1), indicando o início de um novo tópico.
    • Foram criadas por usuários registrados (p.user_id > 0), excluindo postagens do sistema.
    • Não foram excluídas (p.deleted_at ISNULL).
    • Pertencem a tópicos do arquétipo ‘regular’ (t.archetype = 'regular'), excluindo mensagens pessoais.
  • Agrupamento: Os resultados são agrupados pela data de criação das postagens (p.created_at::date).
  • Ordenação: A saída final é ordenada pela data de criação em ordem crescente (ORDER BY p.created_at::date ASC), fornecendo uma visão cronológica da criação de novos tópicos.

Exemplo de Resultados

day topics_created
2023-11-11 18
2023-11-12 10
2023-11-13 21
2023-11-14 19
2023-11-15 22
4 curtidas