0Pricing
SQL Academy · Aula

LAG, LEAD e padrões de séries temporais

Compare cada linha com sua linha anterior ou seguinte usando LAG e LEAD e crie diferenças entre períodos.

LAG, LEAD e padrões de séries temporais é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 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.

LAG e LEAD: Olhando para Trás e para a Frente

Estas funções acessam linhas vizinhas na janela:

  • LAG(col, n, default) — valor n linhas antes da linha atual
  • LEAD(col, n, default) — valor n linhas depois

Linha Anterior

Compare cada pedido com o anterior para o mesmo usuário:

SELECT id, user_id, created_at, total,
       LAG(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS prev_total
FROM orders;

Variação Dia a Dia

Diferença em relação ao dia anterior:

SELECT day, revenue,
       revenue - LAG(revenue) OVER (ORDER BY day) AS delta
FROM daily_revenue
ORDER BY day;

Ano a Ano

LAG com deslocamento 12 em uma série mensal:

SELECT month, revenue,
       LAG(revenue, 12) OVER (ORDER BY month) AS prev_year_revenue,
       revenue / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) - 1 AS yoy
FROM monthly_revenue;

Detectando Lacunas

Encontre dias com dados ausentes:

WITH d AS (
  SELECT day, LAG(day) OVER (ORDER BY day) AS prev_day FROM daily_signups
)
SELECT day, prev_day, day - prev_day AS gap_days
FROM d
WHERE day - prev_day > 1;

Criação de Sessões

Agrupe linhas em sessões quando o intervalo exceder um limite:

WITH gaps AS (
  SELECT user_id, ts,
         CASE WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
                 > INTERVAL '30 min'
              THEN 1 ELSE 0 END AS new_session
  FROM events
)
SELECT user_id, ts,
       SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;

Primeiro e Último no Grupo

FIRST_VALUE e LAST_VALUE recuperam os limites da janela:

SELECT id, total,
       FIRST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at) AS first_order,
       LAST_VALUE(total)  OVER (PARTITION BY user_id ORDER BY created_at
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order
FROM orders;
-- LAST_VALUE needs the explicit frame, otherwise default frame ends at current row.

NTH_VALUE

Escolha o enésimo valor na partição:

SELECT id,
       NTH_VALUE(total, 2) OVER (
         PARTITION BY user_id ORDER BY total DESC
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
       ) AS second_largest
FROM orders;

Valor Padrão em Séries Temporais

O terceiro argumento de LAG é um valor padrão quando não existe uma linha anterior:

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;
-- delta on first day = revenue itself (vs NULL)

Equivalente a uma Autojunção

Você poderia escrever LAG como uma autojunção, mas seria mais lento e menos elegante. Prefira sempre funções de janela.

Desempenho

Funções de janela percorrem a partição uma vez. O gargalo é a ordenação — crie índices nas colunas de ORDER BY quando possível.

Recapitulação

LAG e LEAD permitem comparar uma linha com outra.

  • Anterior/seguinte dentro da partição
  • Variações, comparações entre períodos e criação de sessões
  • FIRST_VALUE/LAST_VALUE para obter limites

Verificação rápida

Você quer calcular a variação da receita dia a dia. Qual função de janela deve usar?

Perguntas Frequentes

A aula “LAG, LEAD e padrões de séries temporais” é grátis?

Sim — o texto completo de “LAG, LEAD e padrões de séries temporais” é 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 “LAG, LEAD e padrões de séries temporais”?

Compare cada linha com sua linha anterior ou seguinte usando LAG e LEAD e crie diferenças entre períodos. 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 3 de 4.

Quanto tempo leva a aula “LAG, LEAD e padrões de séries temporais”?

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. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD e padrões de séries temporais
  4. Totais acumulados e médias móveis
← Voltar para SQL Academy