Oracle analytic functions: lead and lag

Oracle “LEAD” function, according to LAG and LEAD Analytic Functions, is defined as:

“The LEAD function is used to return data from the next row.”

LAG funtion is defined as:

“The LAG function is used to access data from a previous row.”

The following example loops through a payroll table, to get the oldest continuous date for each employee, comparing the current date with the next, and stopping if there’s a difference of more than one day between them. For this, the best solution I found was to use the LEAD function.

create or replace
PROCEDURE PA_PROCESAR_INGRESOS
IS
CURSOR CURSOR1 IS
SELECT DISTINCT IDPERSONAL FROM MAESTROPERSONAL WHERE NVL(ANULADO,0)=1 AND NVL(FECHAINGRESO,'01/01/9000')<>NVL(FECHACESE,'01/01/9000')
ORDER BY IDPERSONAL;

CURSOR CURSOR2 (V_PERSONA IN NUMBER) IS
SELECT CODIGOEMPLEADO,IDPERSONAL,IDEMPRESA,FECHAINGRESO,LEAD(FECHACESE, 1,'01/01/9000') OVER (ORDER BY FECHAINGRESO DESC) AS NEXT_FEC_CESE,
abs((FECHAINGRESO - (LEAD(FECHACESE, 1,'01/01/9000') OVER (ORDER BY FECHAINGRESO DESC)))) as dias,
FECHACESE,NVL(FLAGACTIVO,'N') AS FLAGACTIVO
FROM MAESTROPERSONAL
WHERE NVL(ANULADO,0)=1 AND IDPERSONAL=V_PERSONA AND NVL(FECHAINGRESO,'01/01/9000')<>NVL(FECHACESE,'01/01/9000')
ORDER BY FECHAINGRESO DESC;

VALOR NUMBER;
FECHA_INGRESO DATE;
IDPERSONAL NUMBER;
BEGIN

--DELETE FROM ingresosconsolidados;

FOR C_1 IN CURSOR1
LOOP
FOR C_2 IN CURSOR2(C_1.IDPERSONAL)
LOOP
if c_2.dias = 1 THEN
FECHA_INGRESO:=c_2.FECHAINGRESO;
IDPERSONAL:=c_2.IDPERSONAL;
else
FECHA_INGRESO:=c_2.FECHAINGRESO;
IDPERSONAL:=c_2.IDPERSONAL;
exit;
end if;
END LOOP;
INSERT INTO INGRESOSCONSOLIDADOS (IDPERSONAL,FECHAPRIMERINGRESO)
VALUES (IDPERSONAL,FECHA_INGRESO);
END LOOP;

--SELECT IDPERSONAL, FECHAPRIMERINGRESO FROM USER_RRHH.INGRESOSCONSOLIDADOS ;

COMMIT;
END;

One response to this post.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: