Menu
Coddy logo textTech

LEAD & LAG Functions

Parte da seção Fundamentos do Journey de SQL da Coddy — lição 61 de 72.

As funções LEAD e LAG nos permitem acessar o valor da linha atual por n passos para trás ou n passos à frente.

Por exemplo, se quisermos calcular a razão da receita de uma empresa para a linha atual e um mês atrás, podemos extrair o valor do mês anterior:

idrevenuemonth
15325
24926
33937
47238
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY id

Isso criará a seguinte tabela:

idrevenueprev_month_revenue
1532 
2492532
3393492
4723393

Dessa forma, podemos calcular a razão prev_month_revenue/revenue.

Se em vez disso usássemos a função LEAD, ela pegaria a receita do próximo mês de cada linha:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id
idrevenuenext_month_revenue
1532492
2492393
3393723
4723 
challenge icon

Desafio

Fácil

Tabelas e colunas disponíveis:

  • <strong>air_conditioners</strong>: <strong>id</strong>, <strong>efficiency</strong>, <strong>strength</strong>, <strong>month</strong>

Compare a eficiência de cada ar-condicionado com o anterior.

Escreva uma consulta que mostre a eficiência de cada ar-condicionado junto com a eficiência do ar-condicionado anterior instalado (baseado no id). Além disso, calcule a diferença de eficiência entre o ar-condicionado atual e o anterior. Ordene o resultado por <strong>id</strong> e <strong>efficiency</strong> em ordem ascendente.

Colunas de saída esperadas:

  • id
  • efficiency
  • previous_efficiency (usando LAG)
  • efficiency_difference (eficiência atual - eficiência anterior)

Finalmente, após esta consulta, filtre a linha onde há um previous_efficiency vazio ou efficiency_difference vazio como segue:

SELECT * FROM (
    -- Your query here
)
WHERE previous_efficiency != 0

Folha de consulta

As funções LAG e LEAD permitem acesso a valores de linhas anteriores ou próximas:

Função LAG - obtém valor da linha anterior:

LAG(column_name, n) OVER (ORDER BY column)

Função LEAD - obtém valor da próxima linha:

LEAD(column_name, n) OVER (ORDER BY column)

Exemplo usando LAG para obter a receita do mês anterior:

SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY month) as prev_month_revenue
FROM table1 ORDER BY id

Exemplo usando LEAD para obter a receita do próximo mês:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id

A primeira linha terá NULL para o valor LAG, e a última linha terá NULL para o valor LEAD.

Experimente você mesmo

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos