Función de ventana LAG - Amazon Redshift

Función de ventana LAG

La función de ventana LAG devuelve los valores para una fila en un desplazamiento dado arriba (antes) de la fila actual en la partición.

Sintaxis

LAG (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )

Argumentos

value_expr

La columna o expresión de destino sobre la que opera la función.

desplazamiento

Un parámetro opcional que especifica la cantidad de filas antes de la fila actual para la cual devolver valores. El desplazamiento puede ser un valor entero constante o una expresión que tome un valor entero. Si no especifica un desplazamiento, Amazon Redshift utiliza 1 como valor predeterminado. Un desplazamiento de 0 indica la fila actual.

IGNORE NULLS

Una especificación opcional que indica que Amazon Redshift no debe tener en cuenta los valores nulos al momento de determinar qué fila utilizar. Los valores nulos se incluyen si no se indica IGNORE NULLS.

nota

Puede usar una expresión NVL o COALESCE para reemplazar los valores nulos con otro valor. Para obtener más información, consulte Funciones NVL y COALESCE.

RESPECT NULLS

Indica que Amazon Redshift debe incluir valores nulos al momento de determinar qué fila utilizar. De manera predeterminada, se admite RESPECT NULLS si no especifica IGNORE NULLS.

OVER

Especifica la partición de ventana y el ordenamiento. La cláusula OVER no puede tener una especificación de marco de ventana.

PARTITION BY window_partition

Un argumento opcional que establece el rango de registros para cada grupo en la cláusula OVER.

ORDER BY window_ordering

Ordena las filas dentro de cada partición.

La función de ventana LAG admite expresiones que utilizan cualquiera de los tipos de datos de Amazon Redshift. El tipo de valor devuelto es el mismo que el tipo de la value_expr (expresión_de_valor).

Ejemplos

En el siguiente ejemplo, se muestra la cantidad de tickets vendidos al comprador con un ID de comprador de 3 y la hora en que el comprador 3 compró los tickets. Para comparar cada venta con la venta anterior para el comprador 3, la consulta devuelve la cantidad anterior vendida para cada venta. Debido a que no hay compras antes del 01/16/2008, el primer valor de cantidad vendida anterior es 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)