SQLite LAST_VALUE

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 BYclá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 BYclá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 BYcláusula classifica as linhas em cada partição à qual a LAST_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 .

LAST_VALUE()Exemplos de funções SQLite

Usaremos a seguinte trackstabela 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:

SQLite LAST_VALUE com exemplo ORDER BY

Neste exemplo, a ORDER BYclá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:

SQLite LAST_VALUE com exemplo PARTITION BY

Neste exemplo:

  • Primeiro, a PARTITION BYcláusula dividia as faixas por ID do álbum.
  • Em seguida, a ORDER BYclá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.

Deixe um comentário

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