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:
| id | revenue | month |
| 1 | 532 | 5 |
| 2 | 492 | 6 |
| 3 | 393 | 7 |
| 4 | 723 | 8 |
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY idIsso criará a seguinte tabela:
| id | revenue | prev_month_revenue |
| 1 | 532 | |
| 2 | 492 | 532 |
| 3 | 393 | 492 |
| 4 | 723 | 393 |
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| id | revenue | next_month_revenue |
| 1 | 532 | 492 |
| 2 | 492 | 393 |
| 3 | 393 | 723 |
| 4 | 723 |
Desafio
FácilTabelas 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:
idefficiencyprevious_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 != 0Folha 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 idExemplo 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 idA primeira linha terá NULL para o valor LAG, e a última linha terá NULL para o valor LEAD.
Experimente você mesmo
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
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function8Statistics
Built-In Aggregate Part 1Built-In Aggregate Part 2Grouping Part 1Grouping Part 2Subqueries Part 1Subqueries Part 2Recap - Total Gain ShopRecap - Scooter ShopRecap - Coffee Shop11Window Functions part 1
ROW_NUMBER functionORDER BY criterionPARTITION BY criterionPARTITION & ORDERLEAD & LAG FunctionsRecap - LEAD & LAGRecap - PicturesRecap - Boxes3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns