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 atualLEAD(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
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD e padrões de séries temporais
- Totais acumulados e médias móveis