Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta que elimine registros repetidos

Estas en el tema de Consulta que elimine registros repetidos en el foro de SQL Server en Foros del Web. Hola mis estimados tengo el siguiente caso. Tengo una tabla de votos en la cual un mail podia votar por x participante el problema es ...
  #1 (permalink)  
Antiguo 27/08/2009, 11:16
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Consulta que elimine registros repetidos

Hola mis estimados tengo el siguiente caso.

Tengo una tabla de votos en la cual un mail podia votar por x participante el problema es que haveces el voto se duplicaba se metian 2 o mas vostos con el mismo mail para el mismo participante, lo que necesito es con un query poder ver cuantos votos existen de un mail para un participante y si tiene mas de uno elimine los repetidos.

tambien contemplar que un mail si puede votar por varios participantes, ose que el mail si puede estar muchas veces pero con distinto participante.

Yo alguna ves vi que con un MAX se podia hacer esto y obvio ir eliminado pero la vdd, no recuerdo como.

Espero que me puedan echar la mano.



saludos,
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #2 (permalink)  
Antiguo 27/08/2009, 11:32
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Consulta que elimine registros repetidos

No creo que sea con un Max sino con un Count. La consulta que te dice quein voto más de una vez por la misma opción es la siguiente:

Código:
SELECT Email, Opcion, Count(*)
FROM Votos
GROUP BY Email, Opcion
HAVING Count(*) > 1
Ahora bien, la siguiente consulta te dice los voto de uno por uno.. ( Voto X Voto.. casilla X casilla )

Código:
SELECT Email, Opcion
FROM Votos
GROUP BY Email, Opcion
HAVING Count(*) = 1
Ya sólo te quedaría depurar tu tabla.

Saludos.
  #3 (permalink)  
Antiguo 27/08/2009, 11:37
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Consulta que elimine registros repetidos

tienes que distinguirlos con un DISTINTC (email)
  #4 (permalink)  
Antiguo 27/08/2009, 11:45
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Respuesta: Consulta que elimine registros repetidos

Yo con la siguiente consulta cuanto los votos por usuario y hago un distinct para que no cuente un voto doble con el mismo mail.


Select id_usuario, Count(Distinct(str_email)) As Votos
From tbl_juegoperroamigosVotos
Group By id_usuario
Order By Votos Desc


Esto no tengo problema, el chiste es que quiero depurar mi tabla y eliminar los duplicados pero son mas de 90 mil regitros necesito un query donde me identifique cuantas veces un mismo mail voto por un mismo usuario y si es mas de uno que borre a partir del 2.


Espero que me explique mejor.



Saludos,
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #5 (permalink)  
Antiguo 27/08/2009, 11:49
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Consulta que elimine registros repetidos

Tienes que hacer lo siguiente:

Paso 1: Crear una tabla con los datos basada en la segunda consulta que te muestro, o en la que te de más confianza de que los votos no estan repetidos.
Paso 2: Limpiar tu tabla de votos que tienes actualmente.
Paso 3: Pasar los datos que tienes del Paso 1 e insertarlos en tu tabla de votos.

90 mil registro no son muchos lo hará bastante rápido.

Saludos.

P.D. Lo anterior sino tienes un campo del tipo Identity. Si tienes un campo Identity es otra cosa.
  #6 (permalink)  
Antiguo 27/08/2009, 11:55
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Consulta que elimine registros repetidos

Si lo que deseas es eliminar los duplicados mete el distinct que tienes en una tabla temporal y luego lo renombras
  #7 (permalink)  
Antiguo 27/08/2009, 11:57
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Respuesta: Consulta que elimine registros repetidos

Pues si la logica creo saberla el chiste es las instrucciones jejeje
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #8 (permalink)  
Antiguo 27/08/2009, 12:01
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Consulta que elimine registros repetidos

Cita:
Iniciado por Potro Ver Mensaje
Pues si la logica creo saberla el chiste es las instrucciones jejeje
a tu consulta agregale :

SELECT INTO 'Tablatemporal' FROM (tuconsulta)
luego haces un drop y un alter table

S.E.U.O.

Cita:
En MySQL 5.0, puede crear una tabla de otra añadiendo un comando SELECT al final del comando CREATE TABLE :

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

Última edición por nonpublic; 27/08/2009 a las 12:03 Razón: Mas informacion
  #9 (permalink)  
Antiguo 27/08/2009, 12:05
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Consulta que elimine registros repetidos

Ahhh .. entonces hubieras empezado por ahí... por poner tu la lógica y preguntar de manera especifica tus dudas:

Paso 1:
Código:
SELECT Email, Opcion
Into TempVotos
FROM Votos
GROUP BY Email, Opcion
HAVING Count(*) = 1
Paso 2:
Código:
TRUNCATE TABLE Votos
Paso 3:
Código:
INSERT INTO Votos
SELECT * FROM  TempVotos
Paso 4:
Código:
DROP TABLE TempVotos

Recomendación:
Saca una "copia" de tu tabla de votos por cualquier cosa.
Código:
SELECT *
Into CopiaVotos
FROM Votos
  #10 (permalink)  
Antiguo 27/08/2009, 12:17
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Consulta que elimine registros repetidos

Cita:
Iniciado por daniel00 Ver Mensaje
Ahhh .. entonces hubieras empezado por ahí... por poner tu la lógica y preguntar de manera especifica tus dudas:

Paso 1:
Código:
SELECT Email, Opcion
Into TempVotos
FROM Votos
GROUP BY Email, Opcion
HAVING Count(*) = 1
Paso 2:
Código:
TRUNCATE TABLE Votos
Paso 3:
Código:
INSERT INTO Votos
SELECT * FROM  TempVotos
Paso 4:
Código:
DROP TABLE TempVotos

Recomendación:
Saca una "copia" de tu tabla de votos por cualquier cosa.
Código:
SELECT *
Into CopiaVotos
FROM Votos
Paso 1 <-- la recomendacion
  #11 (permalink)  
Antiguo 27/08/2009, 17:50
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Respuesta: Consulta que elimine registros repetidos

Mil gracias por toda la info al final no dije que estaba trabajando con Sql Server 2005 lo tuve que arreglar con una viwes y despues de ahi hice la consulta..
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #12 (permalink)  
Antiguo 28/08/2009, 09:14
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Consulta que elimine registros repetidos

Potro.

Sí publicas la manera en que lo resolviste sería más constructivo sobre todo porque esta pregunta es muy requerida, es la ventaja de los foros, que le puede servir a alguién más.

Saludos.
  #13 (permalink)  
Antiguo 30/08/2009, 22:04
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Respuesta: Consulta que elimine registros repetidos

Hola,
las recomendaciones que has recibido son correctas y son las que típicamente he visto implementadas. Pero si como he entendido, estas usando SQL Server 2005, la solución adecuada debería emplear CTE y la función ROW_NUMBER sin necesidad de emplear tablas temporales.

La consulta a usar debería quedar como
Código:
WITH DropDups AS (
    SELECT    ROW_NUMBER() OVER(PARTITION BY Email, Opcion ORDER BY (SELECT 1) ) AS Dup
    FROM    Votos
)
DELETE    DropDups
WHERE    Dup > 1
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:19.