Função de janela LAG - Amazon Redshift

Função de janela LAG

A função de janela LAG retorna os valores para uma linha em determinado deslocamento acima (antes) da linha atual na partição.

Sintaxe

LAG (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 antes 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 LAG é compatível com expressões que usam qualquer um dos tipos de dados dos Amazon Redshift. O tipo de retorno é igual ao tipo de value_expr.

Exemplos

O seguinte exemplo mostra a quantidade de ingressos vendidos para o comprador com ID de comprador 3 e a hora que o comprador 3 adquiriu os ingressos. Para comparar cada venda com venda anterior para o comprador 3, a consulta retorna a quantidade anterior vendida em cada venda. Já que não há compras antes de 1/16/2008, o primeiro valor de quantidade vendida anteriormente é nulo:

select buyerid, saletime, qtysold, lag(qtysold,1) over (order by buyerid, saletime) as prev_qtysold from sales where buyerid = 3 order by buyerid, saletime; buyerid | saletime | qtysold | prev_qtysold ---------+---------------------+---------+-------------- 3 | 2008-01-16 01:06:09 | 1 | 3 | 2008-01-28 02:10:01 | 1 | 1 3 | 2008-03-12 10:39:53 | 1 | 1 3 | 2008-03-13 02:56:07 | 1 | 1 3 | 2008-03-29 08:21:39 | 2 | 1 3 | 2008-04-27 02:39:01 | 1 | 2 3 | 2008-08-16 07:04:37 | 2 | 1 3 | 2008-08-22 11:45:26 | 2 | 2 3 | 2008-09-12 09:11:25 | 1 | 2 3 | 2008-10-01 06:22:37 | 1 | 1 3 | 2008-10-20 01:55:51 | 2 | 1 3 | 2008-10-28 01:30:40 | 1 | 2 (12 rows)