Este é um relatório de painel em SQL para Favoritos.
Este relatório de painel fornece uma contagem diária de favoritos criados dentro de um intervalo de datas especificado.
-- [params]
-- date :start_date
-- date :end_date
WITH bookmark_counts AS (
SELECT
DATE(bookmarks.created_at) AS bookmark_date,
COUNT(DISTINCT CASE WHEN bookmarkable_type = 'Topic' THEN bookmarks.id END) AS topic_bookmarks,
COUNT(DISTINCT CASE WHEN bookmarkable_type = 'Post' THEN bookmarks.id END) AS post_bookmarks
FROM bookmarks
WHERE bookmarks.created_at::date BETWEEN :start_date AND :end_date
GROUP BY bookmark_date
)
SELECT
bookmark_date,
topic_bookmarks + post_bookmarks AS total_bookmarks,
topic_bookmarks,
post_bookmarks
FROM bookmark_counts
ORDER BY bookmark_date
Explicação da Consulta SQL
Parâmetros
Para gerar o relatório, você precisa fornecer dois parâmetros: :start_date e :end_date. Esses parâmetros definem o intervalo de datas para o qual você deseja analisar a atividade de favoritos. Ambos os parâmetros de data aceitam o formato de data AAAA-MM-DD.
Bookmark_Counts (CTE)
Uma Expressão Comum de Tabela (CTE) chamada bookmark_counts é usada para organizar os dados antes da seleção final. A CTE executa as seguintes ações:
- Filtragem de Data: Filtra os favoritos por sua data de criação para incluir apenas aqueles criados dentro das datas de início e fim fornecidas (
:start_datee:end_date). - Agrupamento por Data: Agrupa os resultados pela data de criação dos favoritos, garantindo que as contagens sejam agregadas diariamente.
- Contagem de Favoritos: Conta o número de favoritos para tópicos e posts separadamente, usando
DISTINCTpara garantir que cada favorito seja contado apenas uma vez. Isso é feito usando agregação condicional com instruçõesCASE:topic_bookmarksconta os favoritos ondebookmarkable_typeé ‘Topic’.post_bookmarksconta os favoritos ondebookmarkable_typeé ‘Post’.
Consulta Principal
Após a CTE ter organizado os dados, a instrução SELECT final recupera as seguintes colunas:
bookmark_date: A data para a qual as contagens são agregadas.total_bookmarks: A soma dos favoritos de tópicos e posts para cada dia.topic_bookmarks: A contagem de favoritos para tópicos para cada dia. Ex:
post_bookmarks: A contagem de favoritos para posts para cada dia. Ex:
Os resultados são então ordenados por bookmark_date para apresentar os dados em ordem cronológica.
Resultados de Exemplo
| bookmark_date | total_bookmarks | topic_bookmarks | post_bookmarks |
|---|---|---|---|
| 2023-12-01 | 16 | 1 | 15 |
| 2023-12-02 | 4 | 1 | 3 |
| 2023-12-03 | 8 | 0 | 8 |
| 2023-12-04 | 19 | 9 | 10 |
| 2023-12-05 | 18 | 3 | 15 |
| … | … | … | … |

