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
...