Hola a todos:
Antes que nada espero que esten bien :), y pues ahora vengo en ayuda de ustedes compañeros de foro, basicamente mi cuestión es la siguiente:
Es sobre una consulta, el tema lo podriamos tomar de la siguiente manera, se tiene una tabla de transacciones , de empleados , de personas y de polizas basicamente un empleado puede tener un dependiente o mas (familiar, etc), tendriamos la siguiente función,ese empleado cuando se da de alta se registra en las 3 tablas mencionadas, es decir se inserta en la tabla de personas y se registra con id_persona junto con otros datos, en la tabla de empleados se inserta con un id_empleado junto con el id_persona mas otros datos de ahi inserta en la tabla transacciones con un id_transacción mas un id_empleado y por ultimo con la tabla de polizas que genera un ID_poliza y espera el id_transacción mas el id_persona junto con otros datos.
Cuando se genera un "movimiento" es decir que se vaya a agregar un dependiente(suponiendo que ya esta registrado el EMPLEADO-TITULAR) se da de alta solo en la tabla de personas, por lo que genera un id_persona y el id_persona del empleado(titular que esta dando de alta al dependiente) se agrega en un campo de la misma tabla id_persona_padre(cuando es titular va vacio o con 0 ) , esto para saber con quien esta relacionado, una vez hecho esto se genera una nueva transacción(se inserta registro) que incluye ya a este nuevo "dependiente", basicamente el sistema toma el id_empleado que ya se tenia, mas el nuevo consecutivo de id_transacción y hace inserción en la tabla de transacciones a su vez inserta en la tabla de polizas con el NUEVO id_transacción juntos con los id_persona que ya existian mas el nuevo id_persona generado.
Ahora eso "basicamente" es el funcionamiento de esta parte, lo que se requiere es obtener los empleados Y/o dependientes que estan inactivos(id_persona ) y obtener la ultima maxima transacción id_transacción donde estuvieron involucrados cada empleado o dependiente.
Por otra parte cuando el titular desea dar de baja a un dependiente genera una transacción y esto lo hara si este mismo titular es dado de baja genera transacción, la baja es logica, es decir existe un campo en todas las tablas involucradas con un status y este puede ser A= activo o I=inactivo.
Coloco la consulta que tengo:
SELECT DISTINCT (TRANSACTION_ID)
, PERSON_ID--, count(*)
FROM POLICY --- Obtengo las transaciones y las personas que estan ligadas a ellas.
WHERE PERSON_ID IN
( SELECT PERSON_ID --Obtengo el listado de las personas inactivas tanto titulares como dependientes
FROM PERSONS
WHERE STATUS_CD = 'I'
CONNECT BY PRIOR PERSON_ID = PERSON_FATHER_ID
START WITH PERSON_ID IN
(SELECT PERSON_ID
FROM EMPLOYEES -- Obtengo todos los IDs de personas TITULARES de la empresa a manipular
WHERE ENTITY_ID IN(123456)
) )
AND TRANSACTION_ID IN ("PULL DE TRANSACCIONES PARA ESE EMPLEADO")
--ORDER BY TRANSACTION_ID DESC
--GROUP BY TRANSACTION_ID,PERSON_ID
--HAVING COUNT(*)>1
ORDER BY TRANSACTION_ID,PERSON_ID DESC
Con esto obtengo basicamente lo que "requiero" a excepción que salen datos repetidos:
TRANSACTION_ID PERSON_ID
-------------- ----------
3276207 4879199
3289860 5049213
3289865 4879199
3289814 4879199
3289866 5049348
3289866 4879199
3289866 5049211
3289866 5049347
3289813 4879199
3289869 4879199
De los datos que acabo de colocar se tiene que obtener la id_transacción maxima por usuario, evidentemente no repitiendo el id_persona .
Por lo que en teoria quedaria de la siguiente manera(manipulo los datos a mano) que son los que estan marcados a continuación en negritas:
TRANSACTION_ID PERSON_ID
-------------- ----------
3276207 4879199
3289860 5049213
3289865 4879199
3289814 4879199
3289866 5049348
3289866 4879199
3289866 5049211
3289866 5049347
3289813 4879199
3289869 4879199 <=== Su maxima transacción aun que se repite en otras transacciónes.
Limpiando un poco mas los datos el resultado deberia ser:
TRANSACTION_ID PERSON_ID
-------------- ----------
3289860 5049213
3289866 5049348
3289866 5049211
3289866 5049347
3289869 4879199
Podrian apoyarme a verificar que mas puedo hacer para poder obtener este resultado, ya que he metido agrupaciones y aun asi no obtengo el resultado.
O si alguien tuvo este mismo tema y ya lo resolvio me apoye colocando su consulta para darme otra idea, se los agradeceria mucho..
Saludos y gracias.
- Inicie sesión para enviar comentarios
Hola, probaste hacer un
Subido por smoke el 26 Abril, 2017 - 13:31
Hola, probaste hacer un select con ese resultado:
SELECT PERSON_ID--, max (TRANSACTION_ID)
FROM ( TU CONSULTA ANTERIOR ) GROUP BY PERSON_ID--;
Saludos