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.
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:
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:
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.
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:
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!