Resumo : neste tutorial, você aprenderá como usar a NTH_VALUE()
função SQLite para obter o valor da enésima linha em um quadro de janela especificado.
A função SQLite NTH_VALUE()
é uma função de janela que permite obter o valor da enésima linha em um quadro de janela especificado.
Aqui está a sintaxe da NTH_VALUE()
função:
NTH_VALUE(expression, N)
OVER (
PARTITION BY expression1, expression2,...
ORDER BY expression1 [ASC | DESC], expression2,..
frame_clause
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
expression
Qualquer expressão válida é avaliada em relação à enésima linha no quadro da janela. A expressão deve retornar um único valor. Uma subconsulta ou outra função de janela não é permitida no arquivo expression
.
N
Especifica a Nth
linha no quadro da janela especificada pelo arquivo frame_clause
. N deve ser um número inteiro positivo, por exemplo, 1, 2 e 3.
Observe que se a Nth
linha não existir, a NTH_VALUE()
função retornará NULL
.
PARTITION BY
A PARTITION BY
cláusula dividiu as linhas em partições às quais a NTH_VALUE()
função se aplica. A PARTITION BY
cláusula é opcional. Se você omitir, por padrão, a NTH_VALUE()
função tratará todo o conjunto de resultados como uma única partição.
ORDER BY
A ORDER BY
cláusula especifica a ordem das linhas em cada partição à qual a NTH_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.
O FROM FIRST
instrui a NTH_VALUE()
função a iniciar o cálculo na primeira linha da moldura da janela.
Observe que o padrão SQL oferece suporte às cláusulas FROM FIRST
and FROM LAST
da seguinte forma:
NTH_VALUE(expression, N)
FROM {FIRST | LAST}
OVER (
PARTITION BY expression1, expression2,...
ORDER BY expression1 [ASC | DESC], expression2,..
frame_clause
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
No entanto, o SQLite só suporta FROM FIRST
comportamento implicitamente. Você pode obter o efeito FROM LAST
invertendo a ORDER BY
ordem.
Além disso, o padrão SQL define uma opção RESPECT NULLS
ou IGNORE NULLS
para a NTH_VALUE()
função. No entanto, este recurso não está implementado no SQLite. O comportamento padrão é sempre igual ao padrão do padrão SQ, que é RESPECT NULLS
.
NTH_VALUE()
Exemplos de funções SQLite
Consulte a tracks
tabela a seguir do banco de dados de exemplo :
Usando NTH_VALUE()
a função SQLite no conjunto de resultados
A instrução a seguir usa a NTH_VALUE()
função para retornar todas as trilhas e também a segunda trilha mais longa da tracks
tabela:
SELECT
Name,
Milliseconds Length,
NTH_VALUE(name,2) OVER (
ORDER BY Milliseconds DESC
) SecondLongestTrack
FROM
tracks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída parcial:
Neste exemplo, a ORDER BY
cláusula classificou o conjunto de resultados derivado da FROM
cláusula pelos comprimentos da trilha em ordem crescente e a NTH_VALUE()
função retornou a segunda linha do conjunto de resultados, que é a segunda trilha mais longa.
Usando NTH_VALUE()
a função SQLite na partição
O exemplo a seguir encontra a segunda faixa mais longa de cada álbum:
SELECT
AlbumId,
Name,
Milliseconds Length,
NTH_VALUE ( Name,2 ) OVER (
PARTITION BY AlbumId
ORDER BY Milliseconds DESC
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS SecondLongestTrack
FROM
tracks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A imagem a seguir mostra a saída parcial:
Neste exemplo:
- A
PARTITION BY
cláusula dividia as faixas pelo ID do álbum em partições. - A
ORDER BY
cláusula classificou as faixas de cada álbum por sua duração em ordem decrescente. - A moldura da janela começa na primeira linha e termina na última linha de cada partição.
- Em seguida, a
NTH_VALUE()
função é aplicada a cada partição separadamente para obter o valor da segunda linha em cada partição.
Neste tutorial, você aprendeu como usar a NTH_VALUE()
função SQLite para obter o valor da enésima linha de um quadro de janela especificado.