Función de ventana LEAD
La función de ventana LEAD devuelve los valores para una fila en un desplazamiento dado abajo (después) de la fila actual en la partición.
Sintaxis
LEAD (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 debajo 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 de0
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 LEAD 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 proporciona la comisión para eventos en la tabla SALES para los cuales se vendieron tickets el 1 y el 2 de enero de 2008, y la comisión pagada por la venta de tickets de la venta subsiguiente. El siguiente ejemplo utiliza la base de datos de ejemplo TICKIT. Para obtener más información, consulte Base de datos de muestra.
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 | +---------+------------+---------------------+-----------+
En el siguiente ejemplo, se muestra la diferencia máxima entre la comisión de los eventos de la tabla SALES y la comisión pagada por la venta de tickets para la posterior venta del mismo evento. Este ejemplo muestra cómo usar LEAD con una cláusula GROUP BY. Como las funciones de ventana no están permitidas en las cláusulas agregadas, en este ejemplo se utiliza una subconsulta. El siguiente ejemplo utiliza la base de datos de ejemplo TICKIT. Para obtener más información, consulte Base de datos de muestra.
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 | +---------+-----------------------------+---------------------------+