SQLite NTH_VALUE

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 Nthlinha 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 Nthlinha não existir, a NTH_VALUE()função retornará NULL.

PARTITION BY

A PARTITION BYcláusula dividiu as linhas em partições às quais a NTH_VALUE()função se aplica. A PARTITION BYclá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 BYcláusula especifica a ordem das linhas em cada partição à qual a NTH_VALUE()função se aplica.

frame_clause

Define frame_clauseo 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 FIRSTinstrui 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 FIRSTand FROM LASTda 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 FIRSTcomportamento implicitamente. Você pode obter o efeito FROM LASTinvertendo a ORDER BYordem.

Além disso, o padrão SQL define uma opção RESPECT NULLSou IGNORE NULLSpara 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 trackstabela 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 trackstabela:

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:

SQLite Nth_Value sobre exemplo de resultado

Neste exemplo, a ORDER BYcláusula classificou o conjunto de resultados derivado da FROMclá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:

SQLite Nth_Value sobre exemplo de partição

Neste exemplo:

  • A PARTITION BYcláusula dividia as faixas pelo ID do álbum em partições.
  • A ORDER BYclá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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *