Relatórios comuns de datas (MTD, WoW, YoY)
Crie relatórios acumulados no mês, semana a semana e ano a ano com date_trunc e junções da tabela consigo mesma ou funções de janela.
Relatórios comuns de datas (MTD, WoW, YoY) é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Três relatórios clássicos por período
Quase todo painel de negócios precisa de:
- MTD — acumulado no mês
- Semana a semana — comparação entre semanas
- Ano a ano — comparação entre anos
Acumulado no mês
Soma deste mês até o momento:
SELECT SUM(total) AS mtd_revenue
FROM orders
WHERE created_at >= date_trunc('month', NOW())
AND created_at < date_trunc('month', NOW()) + INTERVAL '1 month';Acumulado no ano
O mesmo padrão, com granularidade anual:
SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());Semana a semana
Compare esta semana com a anterior:
SELECT
SUM(total) FILTER (
WHERE created_at >= date_trunc('week', NOW())
) AS this_week,
SUM(total) FILTER (
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week'
AND created_at < date_trunc('week', NOW())
) AS last_week
FROM orders
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week';Ano a ano
O mesmo período comparado com o mesmo período do ano passado:
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
WHERE created_at >= NOW() - INTERVAL '2 years'
GROUP BY 1
ORDER BY 1;
-- Then plot with two lines: current year, previous year.Série diária sem lacunas
Se não houver pedidos em um dia, GROUP BY o ignorará. Gere uma série de calendário completa e faça um LEFT JOIN:
SELECT day, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(
CURRENT_DATE - INTERVAL '30 days',
CURRENT_DATE,
INTERVAL '1 day'
) AS day
LEFT JOIN orders o ON date_trunc('day', o.created_at) = day
GROUP BY day
ORDER BY day;Totais acumulados
Uma função de janela calcula uma soma acumulada sem autojunções:
SELECT day,
revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;Variação entre períodos
Crescimento ano a ano usando LAG:
SELECT month,
revenue,
LAG(revenue, 12) OVER (ORDER BY month) AS prev_year,
(revenue - LAG(revenue, 12) OVER (ORDER BY month))
/ NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) AS yoy_growth
FROM monthly_revenue;Últimos 7 / 30 dias (janela móvel)
Janela móvel versus alinhada ao calendário. Escolha o que sua empresa realmente quer dizer:
-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';
-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());Considerações sobre o fuso horário
«Hoje» depende do fuso do usuário. Converta antes de truncar:
SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
COUNT(*)
FROM events
GROUP BY 1;Pré-agregação com visões materializadas
Se um relatório é executado a cada carregamento de página, materialize-o uma vez por dia. O assunto é abordado em Visões materializadas.
Revisão
Os relatórios por período dependem de alguns padrões.
- Intervalos semiabertos com date_trunc
- FILTER para agrupar períodos em paralelo
- generate_series + LEFT JOIN para preencher lacunas nos dias
- LAG para variações entre períodos
Verificação rápida
Qual expressão marca «o primeiro instante deste mês»?
Aprenda SQL com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 46
- Aulas
- 183
Perguntas Frequentes
A aula “Relatórios comuns de datas (MTD, WoW, YoY)” é grátis?
Sim — o texto completo de “Relatórios comuns de datas (MTD, WoW, YoY)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Relatórios comuns de datas (MTD, WoW, YoY)”?
Crie relatórios acumulados no mês, semana a semana e ano a ano com date_trunc e junções da tabela consigo mesma ou funções de janela. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Relatórios comuns de datas (MTD, WoW, YoY)”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Aritmética de datas e INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Fusos horários: TIMESTAMP em comparação com TIMESTAMPTZ
- Relatórios comuns de datas (MTD, WoW, YoY)