SQL: As funções FIRST_VALUE e LAST_VALUE [4/5]

Veja como obter o primeiro ou último registro de um campo de uma forma bem simples.

Erica Bertan
Computando Arte
3 min readMar 10, 2022

--

Photo by Brienne Hong 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, 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?

FIRST_VALUE e LAST_VALUE são window functions (ou funções de janela em tradução literal) que obtêm o primeiro e último registro de cada partição de uma amostra de dados. Funções de janela tem o papel de retornar um único valor de uma dada partição, enquanto funções sem janela operam em cada registro do resultado da tabela.

A sintaxe parece complicada, mas vamos com calma nos principais pontos:

  • expression é o campo onde desejamos obter o primeiro ou último valor. Lembre-se que o valor é obtido mediante ao resultado da expressão usada para particionar e ordenar os valores;
  • expr_list ou também expressão de partição, é o campo escolhido como partição e será o guia para que as funções FIRST_VALUE e LAST_VALUE sejam aplicadas. Caso nenhum campo seja definido aqui, as funções FIRST_VALUE e LAST_VALUE vão tratar todo o resultado da amostra como uma única partição;
  • order_list é expressão que indicará a lógica de ordenação em cada partição;
  • frame_clause é uma expressão que ajuda a refinar a lógica dos registros que a função vai considerar na partição, ou seja, se registros serão incluídos ou excluídos dela. Porém, não vamos dar atenção a ela neste post.

Exemplo: A música menos dançante de cada artista

Vamos supor que precisamos obter o nome da música menos dançante de cada artista. Claro que existem outras formas de fazer isso, mas vamos aplicar o FIRST_VALUE neste exemplo (o princípio por trás de LAST_VALUE é o mesmo). A query fica assim:

Observe o resultado na Imagem 1. As linhas em vermelho mostram como a função se comportou para as 4 músicas de The Chainsmokers que estavam na amostra utilizada:

Imagem 1 — O resultado da ordenação faz com que a primeira música seja a menos dançante.
Imagem 1 — O resultado da ordenação faz com que a primeira música selecionada seja a menos dançante.

De forma geral, a query particiona o resultado por artista e ordena cada faixa desse artista na ordem crescente, assim o FIRST_VALUE captura o primeiro registro de cada partição, que no caso do exemplo é a música menos dançante. Considerando todas as 4 faixas de The Chainsmokers da amostra, Don't Let Me Down realmente parece ser a menos dançante entre elas 😃.

Veja na Imagem 2 que para Ed Sheeran a música menos dançante selecionada foi Castle on the Hill, conforme consta no campo first_danceability:

Imagem 2 — Castle on the Hill foi selecionada como a a música menos dançante de Ed Sheeran.

Próximos Passos

Se você se interessa pelo tipo de assunto abordado neste post, no próximo e último post da série falaremos sobre mais uma função muito útil em SQL: a LAG.

Referências

[1] FIRST_VALUE and LAST_VALUE window functions

[2] SQL Server LAST_VALUE function

[3] Funções de Janela

--

--

Erica Bertan
Computando Arte

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