- Categorias:
Sintaxe e uso da função de janela (classificação)
FIRST_VALUE¶
Retorna o primeiro valor dentro de um grupo ordenado de valores.
- Consulte também:
Sintaxe¶
Para uma sintaxe window_frame detalhada, consulte Sintaxe e uso da função de janela.
Argumentos¶
exprA expressão que determina o valor de retorno.
expr1A expressão pela qual as linhas são particionadas. Você pode especificar uma única expressão ou uma lista de expressões separadas por vírgula. Por exemplo:
expr2A expressão pela qual se ordenam as linhas. Você pode especificar uma única expressão ou uma lista de expressões separadas por vírgula. Por exemplo:
{ IGNORE | RESPECT } NULLSSe você deve ignorar ou respeitar os valores de NULL quando um
exprcontiver valores de NULL:IGNORE NULLSretorna o primeiro valor diferente de NULL.RESPECT NULLSretorna um valor NULL se for o primeiro valor na expressão.
Padrão:
RESPECT NULLS
Notas de uso¶
Esta função é uma função relacionada à classificação, portanto, deve especificar uma janela. Uma cláusula de janela consiste nas seguintes subcláusulas:
Subcláusula
PARTITION BY expr1(opcional).Subcláusula
ORDER BY expr2(obrigatória). Para obter detalhes sobre outras opções de ordenação compatíveis (ordem de classificação, ordenação dos valores NULL e assim por diante), consulte a documentação da cláusula ORDER BY, que segue as mesmas regras.Subcláusula
window_frame(opcional).
A ordem das linhas em uma janela (e portanto o resultado da consulta) é totalmente determinística somente se as chaves na cláusula ORDER BY tornarem cada linha única. Considere o seguinte exemplo:
O resultado da consulta pode variar se qualquer partição contiver valores da coluna
oque sejam idênticos, ou seriam idênticos em uma comparação que não diferencia maiúsculas e minúsculas.A cláusula ORDER BY dentro da cláusula OVER controla a ordem das linhas somente dentro da janela, não a ordem das linhas na saída de toda a consulta. Para controlar a ordem de saída, use uma cláusula ORDER BY separada no nível mais externo da consulta.
O
window_frameopcional especifica o subconjunto de linhas dentro da janela para as quais a função é calculada. Se nenhumwindow_framefor especificado, o padrão é a janela inteira:ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGObserve que isso se desvia da norma ANSI, que especifica o seguinte padrão para quadros de janelas:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Para uma sintaxe window_frame detalhada, consulte Sintaxe e uso da função de janela.
Exemplos¶
Este exemplo mostra uma consulta que usa a função FIRST_VALUE para encontrar o item de menu mais barato em cada categoria. A consulta contém duas cláusulas ORDER BY: uma para controlar a ordem das linhas em cada partição e outra para classificar a saída da consulta completa. Para criar e carregar a tabela utilizada neste exemplo, consulte Criação e carregamento da tabela menu_items.
O exemplo a seguir também usa a tabela menu_items para comparar três funções relacionadas: FIRST_VALUE, NTH_VALUE e LAST_VALUE:
A consulta cria um quadro de janela deslizante com três linhas de largura, que contém:
A linha que precede a linha atual.
A linha atual.
A linha que segue a linha atual.
A
2na chamadaNTH_VALUE(menu_price_usd, 2)especifica a segunda linha no quadro da janela (que, neste caso, é também a linha atual).Quando a linha atual é a primeira linha no quadro da janela, não há linha anterior para referência, portanto FIRST_VALUE retorna um NULL para aquela linha.
Às vezes, os limites da estrutura se estendem além das linhas em uma partição, mas as linhas inexistentes não são incluídas nos cálculos da função de janela. Por exemplo, quando a linha atual é a primeira linha da partição e o quadro de janela é
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING, não há nenhuma linha anterior a ser referenciada, portanto, a função FIRST_VALUE retorna o valor da primeira linha da partição.Os resultados nunca são iguais para todas as três funções, considerando os dados da tabela. Essas funções selecionam os valores first, last ou nth para cada linha do quadro, e a seleção de valores se aplica separadamente a cada partição.
Este exemplo demonstra a diferença entre IGNORE NULLS e RESPECT NULLS. Os dados de amostra incluem linhas em que o valor de custo é NULL. Com o comportamento RESPECT NULLS padrão, se a primeira linha na partição ordenada tiver um valor NULL, FIRST_VALUE retornará NULL. Com IGNORE NULLS, FIRST_VALUE ignora valores NULL e retorna o primeiro valor diferente de NULL.