Relatório do Painel - Notificar Usuário

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_date e :end_date, que definem o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato de data AAAA-MM-DD.
  • Seleção e Contagem:
    • DATE(created_at) converte o timestamp created_at em um formato de data e o rotula como day. 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 como notifications_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_at da mensagem está entre a :start_date e a :end_date especificadas.
    • 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.
  • 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.

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
1 curtida