Função de janela FIRST_VALUE - Amazon Redshift

Função de janela FIRST_VALUE

Considerando um conjunto de linhas ordenado, FIRST_VALUE retorna o valor da expressão especificada em relação à primeira linha no quadro de janela.

Para obter informações sobre como selecionar a última linha no quadro, consulte Função de janela LAST_VALUE.

Sintaxe

FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )

Argumentos

expressão

A coluna ou expressão de destino na qual a função opera.

IGNORE NULLS

Quando essa opção é usada com FIRST_VALUE, a função retorna o primeiro valor no quadro que não seja NULL (ou NULL se todos os valores forem NULL).

RESPECT NULLS

Indica que o Amazon Redshift deve incluir valores nulos na determinação de qual linha usar. RESPECT NULLS é compatível por padrão se você não especificar IGNORE NULLS.

OVER

Introduz as cláusulas de janela para a função.

PARTITION BY expr_list

Define a janela para a função em termos de uma ou mais expressões.

ORDER BY order_list

Classifica as linhas dentro de cada partição. Se nenhuma cláusula PARTITION BY for especificada, ORDER BY classifica a tabela inteira. Se você especificar uma cláusula ORDER BY, você também deve especificar uma frame_clause.

Os resultados da função FIRST_VALUE dependem da ordem dos dados. Os resultados são não determinísticos nos seguintes casos:

  • Quando uma cláusula ORDER BY é especificada e uma partição contém dois valores diferentes para uma expressão

  • Quando uma expressão avalia para valores diferentes que correspondem ao mesmo valor na lista ORDER BY.

frame_clause

Se uma cláusula ORDER BY é usada para uma função agregada, uma cláusula de quadro explícita é necessária. A cláusula de quadro refina o conjunto de linhas na janela de uma função, incluindo ou excluindo conjuntos de linhas no resultado ordenado. A cláusula de quadro consiste na palavra-chave ROWS e nos especificadores associados. Consulte Resumo da sintaxe de funções da janela.

Tipo de retorno

Essas funções são compatíveis com expressões que usam tipos de dados primitivos do Amazon Redshift. O tipo de retorno é igual ao tipo de dados da expressão.

Exemplos

Os exemplos a seguir usam a tabela VENUE dos dados de amostra TICKIT. Para obter mais informações, consulte Banco de dados de exemplo.

O seguinte exemplo retorna a capacidade de acomodação para cada local de evento da tabela VENUE com os resultados ordenados por capacidade (alta a baixa). A função FIRST_VALUE é usada para selecionar o local de evento que corresponde à primeira linha no quadro: nesse caso, a linha com o mais alto número de assentos. Os resultados são particionados por estado, portanto quando o valor VENUESTATE muda, um novo primeiro valor é selecionado. O quadro da janela não é vinculado, portanto o mesmo primeiro valor é selecionado para cada linha em cada partição.

Para a Califórnia, Qualcomm Stadium tem mais alto número de assentos (70561), portanto esse nome é o primeiro valor para todas as linhas da partição CA.

select venuestate, venueseats, venuename, first_value(venuename) over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venueseats >0) order by venuestate; venuestate | venueseats | venuename | first_value -----------+------------+--------------------------------+------------------------------ CA | 70561 | Qualcomm Stadium | Qualcomm Stadium CA | 69843 | Monster Park | Qualcomm Stadium CA | 63026 | McAfee Coliseum | Qualcomm Stadium CA | 56000 | Dodger Stadium | Qualcomm Stadium CA | 45050 | Angel Stadium of Anaheim | Qualcomm Stadium CA | 42445 | PETCO Park | Qualcomm Stadium CA | 41503 | AT&T Park | Qualcomm Stadium CA | 22000 | Shoreline Amphitheatre | Qualcomm Stadium CO | 76125 | INVESCO Field | INVESCO Field CO | 50445 | Coors Field | INVESCO Field DC | 41888 | Nationals Park | Nationals Park FL | 74916 | Dolphin Stadium | Dolphin Stadium FL | 73800 | Jacksonville Municipal Stadium | Dolphin Stadium FL | 65647 | Raymond James Stadium | Dolphin Stadium FL | 36048 | Tropicana Field | Dolphin Stadium ...

O seguinte exemplo mostra o uso da opção IGNORE NULLS e depende da inclusão de uma nova linha na tabela VENUE:

insert into venue values(2000,null,'Stanford','CA',90000);

Essa nova linha contém um valor NULL para a coluna VENUENAME. Agora, repita a consulta para FIRST_VALUE que foi mostrada anteriormente nesta seção:

select venuestate, venueseats, venuename, first_value(venuename) over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venueseats >0) order by venuestate; venuestate | venueseats | venuename | first_value -----------+------------+----------------------------+------------- CA | 90000 | NULL | NULL CA | 70561 | Qualcomm Stadium | NULL CA | 69843 | Monster Park | NULL ...

Como a nova linha contém o valor mais alto de VENUESEATS (90000) e o VENUENAME é NULL, a função FIRST_VALUE retorna o NULL para a partição CA. Para ignorar linhas como essa na avaliação da função, adicione a opção IGNORE NULLS ao argumento da função:

select venuestate, venueseats, venuename, first_value(venuename) ignore nulls over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venuestate='CA') order by venuestate; venuestate | venueseats | venuename | first_value ------------+------------+----------------------------+------------------ CA | 90000 | NULL | Qualcomm Stadium CA | 70561 | Qualcomm Stadium | Qualcomm Stadium CA | 69843 | Monster Park | Qualcomm Stadium ...