SQL Academy · Aula

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.

Aula 4 de 413 etapas

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»?

Grátis para começar

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

  1. Aritmética de datas e INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Fusos horários: TIMESTAMP em comparação com TIMESTAMPTZ
  4. Relatórios comuns de datas (MTD, WoW, YoY)
← Voltar para SQL Academy