Esta é uma versão SQL do Relatório de Painel para o Sistema.
Este relatório de painel fornece uma contagem diária do número de mensagens pessoais enviadas automaticamente pelo 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
Explicação da Consulta SQL
A consulta funciona extraindo dados da tabela topics – especificamente, aqueles que se qualificam como mensagens privadas para usuários com um subtipo de system_message dentro de um determinado período. Vamos detalhar:
- Parâmetros de Data:
- A consulta aceita dois parâmetros,
:start_datee:end_date, que definem o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato de dataAAAA-MM-DD.
- A consulta aceita dois parâmetros,
- SELECT: A consulta seleciona dois campos:
DATE(created_at) AS day: Isso extrai a parte da data do timestampcreated_at, agrupando efetivamente os registros pelo dia em que foram criados.COUNT(*) AS notifications_count: Isso conta o número total de MPs geradas pelo sistema para cada dia.
- FROM: Especifica a tabela
topicscomo a fonte de dados, que contém registros de todos os tópicos, incluindo mensagens privadas. - WHERE: Contém vários filtros para refinar o conjunto de dados:
archetype = 'private_message': Inclui apenas entradas que são mensagens privadas.subtype = 'system_message': Restringe ainda mais a seleção apenas a mensagens geradas pelo sistema.created_at BETWEEN :start_date AND :end_date: Filtra as MPs para aquelas criadas dentro do intervalo especificado pelos parâmetros.deleted_at IS NULL: Exclui mensagens que foram excluídas.user_id > 0: Garante que as mensagens estejam associadas a contas de usuário reais, em vez de contas do sistema ou anônimas.
- GROUP BY: Agrupa os resultados com base no dia em que foram criados.
- ORDER BY: Ordena o conjunto de resultados final pelo dia em ordem crescente, garantindo uma sequência cronológica de contagens diárias.
Exemplo de Resultados
| day | notifications_count |
|---|---|
| 2024-01-01 | 5 |
| 2024-01-02 | 7 |
| 2024-01-03 | 11 |
| 2024-01-04 | 14 |
| 2024-01-05 | 8 |