Búsqueda de registros con dos datos duplicados

Tengo una base de algunos millones de registros donde entre otras cosas se registra la hora de entrada, de salida y el código de las personas,(hr_entrada, hr_salida, num_cod). Pienso poner como llave la mezcla de la hora de entrada con el código - dado que en realidad una misma persona no puede entrar 2 veces en el mismo momento - pero me encontré con muchos errores de entrada de datos donde tengo registros que tiene el mismo código de la persona y la hora entrada - cuando fisicametne eso es imposible - para no estar arreglando los registros uno a uno, necesito por favor un query de poder mostrar los registros que tengan duplicados el num_cod y la hr_entrada en un mismo registro. He visto algunos post de registros duplicados pero son solo para un dato duplicado. Soy bastante novato en esto y mis intentos de hacer la condición doble "and" no me ha resultado.

1 Respuesta

Respuesta
1
La solución es la siguiente:
select num_cod, hr_entrada
from   tabla
group by num_cod, hr_entrada
having count(*)> 1
Hola, muchas gracias por la respuesta
Tu query funciona y muy bien!, pero necesito afinar un poco más la búsqueda.
El resultado que obtengo con el query es una lista donde aparece una sola vez el registro duplicado con solo esos dos datos... pero necesito que aparezcan ademas el resto de datos del registros y los dos - o 3 o más - registros duplicados, dado que debo confrontarlos para saber si los puedo modificar y como, o simplemente eliminar uno de ellos - no puedo eliminar los dos -
Muchas gracias de antemano y que tengas un buen día
No entiendo bien lo que quieres, planteare lo siguiente:
-Si deseas que aparezacan la cantidad de registro duplicados en cada combinación seria así:
select num_cod, hr_entrada, count(*)
from   tabla
group by num_cod, hr_entrada
having count(*)> 1
-Si deseas que aparezcan los detalles completos de los registros duplicados puedes hacer lo siguiente:
select a.*
from tabla inner join (
select num_cod, hr_entrada
from   tabla
group by num_cod, hr_entrada
having count(*)> 1) b on a.num_cod= b.num_cod and b.hr_entrada= b.hr_entrada
Esto te dará como resultado todos los registros duplicados con todos sus datos.
Hola
De nuevo mil gracias por la ayuda y la rapidez
Lo único que hice fue cambiar 'a' por el nombre de la tabla - 'tabla'.
Y funciono!
Aunque no entiendo que significa y como funciona 'b'
De nuevo muchas gracias y te copio el query
select TABLA.*
from  TABLA inner join (
select NUM_COD, HR_ENTRADA
from  TABLA
group by NUM_COD, HR_ENTRADA
having count(*)> 1) b on a.NUM_COD = b.NUM_COD and b.HR_ENTRADA= b.HR_ENTRADA
Muchas gracias por tu ayuda, ha sido muy rapido y muy útil, tenia 2 días buscando uno a uno los registros y ahora me han salido 300 de un solo golpe.
Eso me ha ahorrado días de trabajo.
Debes que dejar el valor "a" y el valor "b" que he ingresado, tu debes reemplaza a "TABLA" por el nombre de tu tabla.
"a" Y "b" son alias que he definido para estas dos tablas, la subconsulta se convierte en un tabla que llamo "b".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas