Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Oracle/PLSQL: función de PLOMO
Este tutorial de Oracle explica cómo usar Oracle/PLSQL función principal Con sintaxis y ejemplos.
describir
La función LEAD de Oracle/PLSQL es una función analítica que le permite consultar varias filas en una tabla a la vez sin unir la tabla a sí misma. Devuelve el valor de la siguiente fila de la tabla. Para devolver un valor de la fila anterior, intente usar la función LAG.
sintaxis
La sintaxis de la función LEAD en Oracle/PLSQL es:
LEAD ( expression [, offset [, default] ] ) OVER ( [ query_partition_clause ] order_by_clause )
parámetro o parámetro
Las expresiones pueden contener expresiones de otras funciones integradas, pero pueden No Contiene cualquier función analítica. El desplazamiento es opcional. Es el desplazamiento físico de la fila actual en la tabla. Si se omite este parámetro, el valor predeterminado es 1. predeterminado opcional. Este valor se devuelve si el desplazamiento está fuera de los límites de la tabla. Si se omite este parámetro, por defecto está vacío. cláusula_partición_consulta Opcional. Se utiliza para dividir los resultados en grupos basados en una o más expresiones. order_by_clause opcional. Se utiliza para ordenar los datos dentro de cada partición.
devolver los bienes
La función LEAD devuelve el valor de la siguiente fila de la tabla.
aplicar para
La función LEAD está disponible en las siguientes versiones de Oracle/PLSQL:
- Oráculo 12c, Oráculo 11g, Oráculo 10g, Oráculo 9i, Oráculo 8i
ejemplo
La función LEAD se puede utilizar en Oracle/PLSQL.
Veamos un ejemplo. Si tenemos una tabla de pedidos con los siguientes datos:
fecha de orden | ID DEL PRODUCTO | cantidad |
---|---|---|
2007/09/25 | 1000 | 20 |
2007/09/26 | 2000 | 15 |
2007/09/27 | 1000 | 8 |
2007/09/28 | 2000 | 12 |
2007/09/29 | 2000 | 2 |
2007/09/30 | 1000 | 4 |
Ejecutamos la siguiente instrucción SQL:
SELECT product_id, order_date, LEAD (order_date,1) OVER (ORDER BY order_date) AS next_order_date FROM orders;
Devolverá los siguientes resultados:
ID DEL PRODUCTO | fecha de orden | NEXT_ORDER_DATE |
---|---|---|
1000 | 2007/09/25 | 2007/09/26 |
2000 | 2007/09/26 | 2007/09/27 |
1000 | 2007/09/27 | 2007/09/28 |
2000 | 2007/09/28 | 2007/09/29 |
2000 | 2007/09/29 | 2007/09/30 |
1000 | 2007/09/30 | nulo |
En este ejemplo, la función LEAD ordenará todos los valores de order_date en la tabla de pedidos en orden ascendente y luego devolverá el siguiente order_date porque usamos el desplazamiento 1.
Si usamos un desplazamiento de 2, devolverá order_date de 2 pedidos más tarde. Si hubiéramos utilizado un desplazamiento de 3, habría devuelto la fecha_pedido de los 3 pedidos posteriores… y así sucesivamente.
usar partición
Ahora veamos un ejemplo más complejo en el que usamos la cláusula de partición de consulta para devolver la siguiente fecha_pedido para cada id_producto.
Ingrese la siguiente instrucción SQL:
SELECT product_id, order_date, LEAD (order_date,1) OVER (PARTITION BY product_id ORDER BY order_date) AS next_order_date FROM orders;
Devolverá los siguientes resultados:
ID DEL PRODUCTO | fecha de orden | NEXT_ORDER_DATE |
---|---|---|
1000 | 2007/09/25 | 2007/09/27 |
1000 | 2007/09/27 | 2007/09/30 |
1000 | 2007/09/30 | nulo |
2000 | 2007/09/26 | 2007/09/28 |
2000 | 2007/09/28 | 2007/09/29 |
2000 | 2007/09/29 | nulo |
En este ejemplo, la función LEAD dividirá los resultados por product_id y luego por order_date de la siguiente manera PARTITION BY product_id ORDER BY order_date
Esto significa que la función LEAD solo evaluará el valor order_date si product_id coincide con product_id del registro actual. Cuando se encuentra un nuevo product_id, la función LEAD reinicia el cálculo y las particiones con el product_id adecuado.
Como puede ver, el tercer registro en el conjunto de resultados tiene un valor NULL para next_order_date porque es el último registro en la partición con product_id 1000 (ordenado por order_date). Lo mismo ocurre con el sexto registro con un product_id de 2000.