Lag/Lead com janelas de quadro
Combine LAG/LEAD com janelas de quadro para calcular variações entre períodos e detectar lacunas em séries temporais.
Lag/Lead com janelas de quadro é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 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.
Recapitulação de LAG/LEAD
LAG(col, n) retorna o valor n linhas antes da linha atual na janela. LEAD(col, n) olha para frente.
SELECT day, revenue,
LAG(revenue) OVER (ORDER BY day) AS prev_day_revenue
FROM daily_revenue;LAG com valor padrão
O terceiro argumento é um valor padrão quando não existe uma linha vizinha:
LAG(revenue, 1, 0) OVER (ORDER BY day)
-- Returns 0 instead of NULL for the very first row.Calculando diferenças
Variação de um dia para o outro:
SELECT day, revenue,
revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;LAG em várias etapas
Comparar com N dias atrás — útil para comparações semana a semana e ano a ano:
LAG(revenue, 7) OVER (ORDER BY day) -- 7 days ago
LAG(revenue, 365) OVER (ORDER BY day) -- 1 year agoLEAD para intervalos de previsão
Padrões do tipo "Qual é o próximo evento?":
SELECT id, ts,
LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) AS next_ts,
LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) - ts AS gap_to_next
FROM events;Padrões por usuário
LAG/LEAD respeitam PARTITION BY:
SELECT user_id, ts, action,
LAG(action) OVER (PARTITION BY user_id ORDER BY ts) AS prev_action
FROM events;
-- prev_action is the user's previous event, not globally.Detectando mudanças de estado
Combinar LAG com CASE:
SELECT id, status,
CASE WHEN status <> LAG(status) OVER (ORDER BY ts) THEN 'changed' ELSE 'same' END
FROM orders;FIRST_VALUE/LAST_VALUE
O primeiro ou o último valor dentro da moldura:
FIRST_VALUE(status) OVER (PARTITION BY order_id ORDER BY ts) AS first_status
-- The status when the order was first seen.
LAST_VALUE(status) OVER (
PARTITION BY order_id ORDER BY ts
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS final_statusNTH_VALUE
O enésimo valor de uma janela ordenada:
NTH_VALUE(revenue, 3) OVER (
ORDER BY revenue DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
-- Third-highest revenue value.Funções de moldura por grupo
Combinar LAG com PARTITION BY para obter linhas vizinhas agrupadas:
SELECT user_id, ts, page,
LAG(page) OVER (PARTITION BY user_id ORDER BY ts) AS prev_page,
LEAD(page) OVER (PARTITION BY user_id ORDER BY ts) AS next_page
FROM page_views;Desempenho
As funções de janela ordenam uma vez por partição. Crie índices nas colunas de PARTITION BY e ORDER BY quando as partições forem grandes.
Recapitulação
LAG/LEAD tornam barata a comparação entre linhas consecutivas.
- O valor padrão evita NULL
- Combine com CASE para detectar mudanças de estado
- FIRST_VALUE/LAST_VALUE/NTH_VALUE completam a família
Verificação rápida
Você quer que cada linha inclua o intervalo, em segundos, até o próximo evento do usuário. Qual função deve usar?
Perguntas Frequentes
A aula “Lag/Lead com janelas de quadro” é grátis?
Sim — o texto completo de “Lag/Lead com janelas de quadro” é 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 com janelas de quadro”?
Combine LAG/LEAD com janelas de quadro para calcular variações entre períodos e detectar lacunas em séries temporais. 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 2 de 4.
Quanto tempo leva a aula “Lag/Lead com janelas de quadro”?
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
- Cláusulas de quadro: ROWS vs RANGE
- Lag/Lead com janelas de quadro
- Agrupamento em faixas com NTILE e Cume_Dist
- Padrões de relatórios do mundo real