Access - Comparar Campos en Registros Consecutivos

 
Vista:

Comparar Campos en Registros Consecutivos

Publicado por Kerwin Torres (1 intervención) el 15/09/2013 15:08:20
Saludos a Todos

Agradezco su colaboración en el siguiente problema: Tengo una tabla con 4200 registros de la cual 2400 son duplicados, los registros estan organizados de manera secuencial para identificar los duplicados, lo que necesito es comparar un campo que llame Fecha _AFI en cada registro duplicado a fin de identificar la fecha mas reciente, una vez hecho esto asignarle a un campo llamado NS, el valor de "N13" y asi poder identificar los registros duplicados con fecha mas reciente para solo quedarme con los registros mas antiguos. es algo como esto:


TIPO_ID NUM_ID NOM1 NOM2 APE1 APE2 Fecha_AFI NS
CC 124578 LUIS JOSE PEREZ RUIZ 02/09/2013
RC 124578 LUIS JOSE PEREZ RUIZ 15/01/2012
TI 258741 MARIA LUISA GOMEZ RANGEL 13/10/2011
CC 258741 MARIA LUISA GOMEZ RANGEL 15/10/2012


y asi en toda la tabla, lo que necesito es identificar los duplicados con fecha mas reciente y obtener algo como:

TIPO_ID NUM_ID NOM1 NOM2 APE1 APE2 Fecha_AFI NS
CC 124578 LUIS JOSE PEREZ RUIZ 02/09/2013 N13
RC 124578 LUIS JOSE PEREZ RUIZ 15/01/2012
TI 258741 MARIA LUISA GOMEZ RANGEL 13/10/2011
CC 258741 MARIA LUISA GOMEZ RANGEL 15/10/2012 N13

probe ingresando en un formulario un codigo que encontre en esta pagina para leer registros consecutivos pero no me funciono

Agradezco su colaboración indicándome como obtenerlo, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Comparar Campos en Registros Consecutivos

Publicado por William Alexander Brito Viñas (23 intervenciones) el 17/09/2013 19:37:28
Segun entendi lo que quieres es quedarte con los registros con menor valor de la columna Fecha_AFI por cada registro de personas.

He hecho algunos supuestos:

1- La columna NUM_ID identifica la persona.
2- La tabla se llama Employees.

Siempre es mejor no hacer con VBA lo que podria lograrse con SQL

La siguiente consulta, te devuelve solo los registros para los cuales el valor de Fecha_AFI es minimo.

1
2
3
4
5
6
7
8
9
10
11
SELECT t1.*
FROM
  (SELECT * FROM Employees) AS t1
INNER JOIN
  (SELECT Employees.NUM_ID, Min(Employees.Fecha_AFI) AS MinOfFecha_AFI
      FROM Employees
      GROUP BY Employees.NUM_ID) as t2
ON
    (t1.NUM_ID = t2.NUM_ID)
  AND
    (t1.Fecha_AFI = t2.MinOfFecha_Afi);


La tabla original deberia tener alguna clave principal, Recominendo crear indices con duplicados sobre las columnas NUM_ID y otro sobre Fecha_AFI antes de hacer la consulta para intentar acelerarla. A mi me funciono para los 4 registros que ilustras pero no sé el impacto si la tabla es mas extensapues el diseño de la consulta no es eficiente pero si funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar