Função de janela LEAD - Amazon Redshift

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 de 0 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 | +---------+-----------------------------+---------------------------+