Este é um relatório de painel em versão SQL para Notificar Usuário.
Este relatório de painel fornece uma contagem diária do número de vezes que os usuários foram notificados privadamente por uma sinalização em uma de suas postagens.
-- [params]
-- date :start_date = 2023-12-15
-- date :end_date = 2024-01-16
SELECT
DATE(created_at) AS day,
COUNT(1) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
AND subtype = 'notify_user'
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 notify_user 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,
- Seleção e Contagem:
DATE(created_at)converte o timestampcreated_atem um formato de data e o rotula comoday. Isso permite agrupar e contar mensagens pelo dia em que foram criadas.COUNT(1)é usado para contar o número de entradas para cada dia, rotulando essa contagem comonotifications_count.
- Critérios de Filtragem:
- A consulta filtra apenas as entradas onde o
archetypeé'private_message', garantindo que estamos olhando apenas para mensagens e não para outros tipos de tópicos. - O
subtypeé restrito a'notify_user', isolando casos em que os usuários foram notificados sobre postagens sinalizadas. - Verifica se o timestamp
created_atda mensagem está entre a:start_datee a:end_dateespecificadas. - Mensagens que foram excluídas (
deleted_at IS NULL) são excluídas da contagem para garantir que o relatório reflita apenas comunicações ativas. - Finalmente, garante que as mensagens estejam associadas a um usuário válido, confirmando
user_id > 0.
- A consulta filtra apenas as entradas onde o
- Agrupamento e Ordenação:
- A consulta usa
GROUP BY DATE(created_at)para agregar os resultados por cada dia dentro do intervalo de datas especificado. - Em seguida, ordena os resultados cronologicamente com
ORDER BY day, tornando o relatório fácil de ler e interpretar.
- A consulta usa
Exemplo de Resultados
| day | notifications_count |
|---|---|
| 2023-12-17 | 1 |
| 2023-12-18 | 1 |
| 2023-12-21 | 1 |
| 2023-12-23 | 1 |
| 2023-12-26 | 1 |