Função de janela LEAD
A função de janela LEAD retorna os valores para uma linha em determinado deslocamento abaixo (depois) da linha atual na partição.
Sintaxe
LEAD (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
Argumentos
- value_expr
-
A coluna ou expressão de destino na qual a função opera.
- deslocamento
-
Um parâmetro opcional que especifica o número de linhas abaixo da linha atual para as quais retornar valores. Este deslocamento pode ser um inteiro constante ou uma expressão que avalia para um inteiro. Se você não especificar um deslocamento, o Amazon Redshift usará
1
como o valor padrão. Um deslocamento de0
indica a linha atual. - IGNORE NULLS
-
Uma especificação opcional que indica que o Amazon Redshift deve ignorar valores nulos na determinação de qual linha usar. Valores nulos são incluídos se IGNORE NULLS não for listada.
nota
Você pode usar uma expressão NVL ou COALESCE para substituir os valores nulos por outro valor. Para obter mais informações, consulte Funções NVL e COALESCE.
- 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
-
Especifica o particionamento e ordem da janela. A cláusula OVER não pode conter uma especificação de quadro da janela.
- PARTITION BY window_partition
-
Um argumento ideal que define o intervalo de registros para cada grupo na cláusula OVER.
- ORDER BY window_ordering
-
Classifica as linhas dentro de cada partição.
A função da janela LEAD é compatível com expressões que usam qualquer um dos tipos de dados do Amazon Redshift. O tipo de retorno é igual ao tipo de value_expr.
Exemplos
O seguinte exemplo fornece a comissão para eventos na tabela SALES para os quais ingressos foram vendidos em 1º de janeiro de 2008 e 2 de janeiro de 2008, assim como a comissão paga por vendas de ingressos para a venda subsequente. Os exemplos a seguir usa o banco de dados de exemplo de TICKIT. Para ter mais informações, consulte Banco de dados de exemplo.
SELECT eventid, commission, saletime, LEAD(commission, 1) over ( ORDER BY saletime ) AS next_comm FROM sales WHERE saletime BETWEEN '2008-01-09 00:00:00' AND '2008-01-10 12:59:59' LIMIT 10;
+---------+------------+---------------------+-----------+ | eventid | commission | saletime | next_comm | +---------+------------+---------------------+-----------+ | 1664 | 13.2 | 2008-01-09 01:00:21 | 69.6 | | 184 | 69.6 | 2008-01-09 01:00:36 | 116.1 | | 6870 | 116.1 | 2008-01-09 01:02:37 | 11.1 | | 3718 | 11.1 | 2008-01-09 01:05:19 | 205.5 | | 6772 | 205.5 | 2008-01-09 01:14:04 | 38.4 | | 3074 | 38.4 | 2008-01-09 01:26:50 | 209.4 | | 5254 | 209.4 | 2008-01-09 01:29:16 | 26.4 | | 3724 | 26.4 | 2008-01-09 01:40:09 | 57.6 | | 5303 | 57.6 | 2008-01-09 01:40:21 | 51.6 | | 3678 | 51.6 | 2008-01-09 01:42:54 | 43.8 | +---------+------------+---------------------+-----------+
O exemplo a seguir fornece a diferença máxima entre a comissão de eventos na tabela SALES e a comissão paga pela venda de ingressos para a venda subsequente do mesmo evento. O exemplo a seguir mostra como usar LEAD com uma cláusula GROUP BY. Como as funções de janela não são permitidas em cláusulas agregadas, este exemplo usa uma subconsulta. Os exemplos a seguir usa o banco de dados de exemplo de TICKIT. Para ter mais informações, consulte Banco de dados de exemplo.
SELECT eventid, eventname, max(next_comm_diff) as max_commission_difference FROM ( SELECT sales.eventid, eventname, commission - LEAD(commission, 1) over (ORDER BY sales.eventid, saletime) AS next_comm_diff FROM sales JOIN event ON sales.eventid = event.eventid ) GROUP BY eventid, eventname ORDER BY eventid LIMIT 10
| eventid | eventname | max_commission_difference | +---------+-----------------------------+---------------------------+ | 1 | Gotterdammerung | 7.95 | | 2 | Boris Godunov | 227.85 | | 3 | Salome | 1350.9 | | 4 | La Cenerentola (Cinderella) | 790.05 | | 5 | Il Trovatore | 214.05 | | 6 | L Elisir d Amore | 510.9 | | 7 | Doctor Atomic | 180.6 | | 9 | The Fly | 147 | | 10 | Rigoletto | 186.6 | +---------+-----------------------------+---------------------------+