Registros Unicos

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.

Hola, probaste hacer un select con ese resultado:

SELECT PERSON_ID--, max (TRANSACTION_ID) 
  FROM ( TU CONSULTA ANTERIOR )  
GROUP BY PERSON_ID--;

Saludos