SQL: As funções LAG e LEAD [5/5]

Veja como obter o registro anterior ou posterior de um campo de uma forma bem simples.

Erica Bertan
Computando Arte
4 min readApr 21, 2022

--

Photo by Vidar Nordli-Mathisen on Unsplash

Disclaimer

Nesta série de 5 posts, gostaria de compartilhar com vocês alguns comandos que tive contato recentemente em SQL e que considero muito úteis! Se você ainda não leu os outros artigos, sugiro começar pelo primeiro post da série, onde falo sobre as funções Greatest and Least.

O que são essas funções e para que servem?

Em termos simples, a função LAG permite o acesso a uma linha anterior à linha atual, ao passo que a função LEAD permite o acesso a uma linha posterior. Vamos para um exemplo para ficar mais inteligível:

Figura 1. Tabela de preços de iPhone ao longo dos anos.

Imagine uma tabela de preços de iPhone ao longo dos anos, como na Figura 1. Queremos saber para cada ano qual foi o preço do iPhone no ano anterior e no ano posterior. O resultado que buscamos está esquematizado na Figura 2:

Figura 2. Preços dos iPhones nos anos anteriores e posteriores.

As funções LAG e LEAD nos ajudariam a produzir justamente esse resultado. Bem útil, não é mesmo? Vamos ver na prática como fica o código em SQL.

Exemplo: Quais os termos de busca mais buscados no Amazonas ao longo de cada semana do ano de 2022?

Vamos mudar um pouco o conjunto de dados para esse último post da série. Iremos explorar um pouco a base de dados pública do BigQuery que contém os top termos de busca do Google no mundo. Nossa consulta para a pergunta do exemplo fica assim:

E produzimos uma série de registros com os termos mais acessados por semana no ano de 2022, como ilustrado na Figura 3. Você também pode rodar a query de exemplo no BigQuery e até tentar fazer de outras formas.

Figura 3. Top termos buscados no Amazonas por semana no ano de 2022.

Ok, mas você pode estar se perguntando onde o LAG e o LEAD entram, certo? Vamos repetir a mesma ideia do exemplo do iPhone aqui no exemplo dos top termos buscados no Amazonas, e vamos adicionar duas colunas que informam quais são os termos mais buscados da semana anterior e posterior.

Nos campos previous_week_top_terms e next_week_top_terms temos o uso da sintaxe para produzir o resultado que queremos. O resultado pode ser conferido no BigQuery:

Figura 4. O campo previous_week_top_terms captura os top termos da semana anterior.
Figura 5. O campo next_week_top_terms captura os top termos da semana posterior.

Sintaxe

Na prática, a sintaxe é muito similar às funções de janela que mostrei nos posts anteriores dessa série.

Onde:

  • expression: indica o campo que você necessita obter na linha anterior ou posterior;
  • offset: indica quantos campos anteriormente ou posteriormente você precisa “andar” para obter o valor desejado. No caso do exemplo do artigo utilizei o valor 1, ou seja, a consulta obteve o registro imediatamente antes e imediatamente depois da linha corrente;
  • default_value: preenche com um valor default no início ou fim da tabela, ao invés de deixá-lo nulo;
  • partition_expression: é o campo escolhido como partição e será o guia para que as funções LAG e LEAD reiniciem sua aplicação;
  • sort_expression: é expressão que indicará a lógica de ordenação em cada partição.

Comentários Finais

Chegamos ao final da série de posts sobre SQL para Análise de Dados. Essas funções me acompanham no meu dia a dia e penso que são recursos bastante úteis para consultas sem usar muito código.

Espero que essa série de posts tenha a aumentar seu cinto de utilidades, e obrigada por acompanhar até aqui!

Referências

[1] PostgreSQL LAG function

[2] LEAD and LAG functions in SQL

[3] The LAG function and the LEAD function in SQL

--

--

Erica Bertan
Computando Arte

Love to learn and sometimes I write when I’m inspired. Data Engineer @ Loggi