Resumo : neste tutorial, você aprenderá como usar a LAST_VALUE()
função SQLite para obter o valor da última linha em um quadro de janela especificado.
Introdução à LAST_VALUE()
função
É LAST_VALUE()
uma função de janela que permite obter o valor da última linha em um quadro de janela especificado.
Aqui está a sintaxe da LAST_VALUE()
função:
LAST_VALUE(expression) OVER (
PARTITION BY expression1, expression2,...
ORDER BY expression1 [ASC | DESC], expression2,..
frame_clause
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Vamos examinar a sintaxe com mais detalhes:
expression
Qualquer expressão válida é avaliada em relação à última linha no quadro da janela. A expressão deve retornar um único conjunto de resultados. Não é permitido usar uma subconsulta ou outra função de janela no arquivo expression
.
PARTITION BY
A PARTITION BY
cláusula divide o conjunto de resultados em partições por um ou mais critérios aos quais a LAST_VALUE()
função se aplica. A PARTITION BY
cláusula é opcional. Se você ignorá-lo, a LAST_VALUE()
função tratará todo o conjunto de resultados como uma única partição.
ORDER BY
A ORDER BY
cláusula classifica as linhas em cada partição à qual a LAST_VALUE()
função se aplica.
frame_clause
Define frame_clause
o subconjunto (ou quadro) da partição atual. Para obter informações mais detalhadas sobre a cláusula frame, confira o tutorial da cláusula window frame .
LAST_VALUE()
Exemplos de funções SQLite
Usaremos a seguinte tracks
tabela do banco de dados de exemplo para fins de demonstração:
1) Usando LAST_VALUE()
a função SQLite no exemplo do conjunto de resultados
O exemplo a seguir usa a LAST_VALUE()
função para retornar o nome da faixa, a duração da faixa em minutos e a faixa mais longa do álbum id 4:
SELECT
Name,
printf ( '%.f minutes',
Milliseconds / 1000 / 60 )
AS Length,
LAST_VALUE ( Name ) OVER (
ORDER BY Milliseconds
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS LongestTrack
FROM
tracks
WHERE
AlbumId = 4;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Neste exemplo, a ORDER BY
cláusula classificou as faixas do álbum id 4 por sua duração e a LAST_VALUE()
função selecionou a última faixa do conjunto de resultados, que é a faixa mais longa.
A seguinte cláusula frame define o quadro da janela que começa na primeira linha e termina na última linha da partição:
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que usamos a printf()
função para formatar a duração da trilha em minutos.
2) Usando SQLite LAST_VALUE()
no exemplo de partição
O exemplo a seguir mostra todas as faixas de todos os álbuns. Além disso, mostra a faixa mais curta de cada álbum:
SELECT
AlbumId,
Name,
printf ( '%.f minutes',
Milliseconds / 1000 / 60 )
AS Length,
LAST_VALUE ( Name ) OVER (
PARTITION BY AlbumId
ORDER BY Milliseconds DESC
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS ShortestTrack
FROM
tracks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A imagem a seguir exibe a saída parcial:
Neste exemplo:
- Primeiro, a
PARTITION BY
cláusula dividia as faixas por ID do álbum. - Em seguida, a
ORDER BY
cláusula classificou as faixas por duração, de longa para curta. - Por fim,
LAST_VALUE()
selecione a última faixa em cada quadro da janela, que é a faixa mais curta de cada álbum.
Neste tutorial, você aprendeu como usar a LAST_VALUE()
função SQLite para obter o valor da última linha em um quadro de janela especificado.