Eliminar un solo registro de los duplicados

1,858 views
Skip to first unread message

Oscar Bonet

unread,
Jun 16, 2017, 11:54:23 AM6/16/17
to mundovis...@googlegroups.com

 

 

Hola,

Tengo esta inquietud.

Resulta que en SQL-Server 2008  tengo en una tabla dos registros duplicados, es decir ambos con la misma información generada por una falla interna en el sistema, entonces yo identifico estos registros apoyándome en la función y así los encuentro

ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber

Pero como hago para eliminar tan solo un registro de los dos?

 

Gracias y en espera de sus comentarios al respecto,

Atentamente,

 

Oscar

 

 

Alex Orihuela Rosales

unread,
Jun 16, 2017, 12:35:39 PM6/16/17
to mundovis...@googlegroups.com
Bueno yo crearía un campo auto incremental, luego elimino el registro que deseo y luego elimino el campo auto incremental.
Saludos.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfoxpro+unsubscribe@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfoxpro+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Carlos Miguel FARIAS

unread,
Jun 16, 2017, 5:08:21 PM6/16/17
to mundovisualfoxpro
No recuerdo si SQL Server cuenta con la clausula TOP u otra equivalente que te permita limitar la cantidad de filas a procesar.
Entonces en el DELETE FROM tuTabla TOP 1 WHERE tus condiciones.
Saludos: Miguel, La Pampa (RA)

Eduardo Martinez

unread,
Jun 16, 2017, 6:13:10 PM6/16/17
to mundovis...@googlegroups.com
Personalmente nunca elimino registros de ninguna de mis tablas, en su lugar yo cuento con una columna FechaBaja la cual evaluo en cada consulta y si NULL es falso la dejo de lado.
Aqui parte del codigo FOX que uso con MYSQL SERVER para eliminar registros duplicados, el campo "pk" es autonumérico, espero te sirva

TEXT TO cadsql NOSHOW TEXTMERGE PRETEXT 3
SELECT MAX(pk) AS pk , COUNT(IDMARC) AS CUANTOS FROM tabla1 GROUP BY TGNUMDOC, FECHAHORA HAVING CUANTOS>1 ORDER BY TGNUMDOC, FECHAHORA
ENDTEXT

result=SQLEXEC(lnHandle1,cadsql,"cRepetido",NTALLY )
IF NTALLY(2)>0 THEN && SI VALORES DEVUELTOS >  A 0
    SELECT cRepetido
    SCAN
        cPk      = cRepetido.pk
        TEXT TO caddel TEXTMERGE NOSHOW PRETEXT 3
        DELETE FROM tabla1 WHERE pk=<<cPk>> LIMIT 1
        ENDTEXT
        result=SQLEXEC(lnHandle1,caddel)
    ENDSCAN
ENDIF



El 16 de junio de 2017, 16:08, Carlos Miguel FARIAS <carlosmig...@gmail.com> escribió:
No recuerdo si SQL Server cuenta con la clausula TOP u otra equivalente que te permita limitar la cantidad de filas a procesar.
Entonces en el DELETE FROM tuTabla TOP 1 WHERE tus condiciones.
Saludos: Miguel, La Pampa (RA)

Cesar Yamunaque

unread,
Jun 17, 2017, 7:37:05 PM6/17/17
to mundovis...@googlegroups.com
No se si es posible en SQL

1) crear un campo temporal
2) Crear una Key UNICA
3) AL Ordenar por la Key Unica solo se vera un registro de los duplicados
4) coloca algo en el campo temporal
5) ordenar por otra key
6) eliminar los que tienen algo en el campo temporal

Saludos


Raúl A. Juárez

unread,
Jun 19, 2017, 11:50:18 AM6/19/17
to Mundo Visual FoxPro
Me toco hacer algo parecido hace unos dìas en mySQL, de un Plan de Cuentas (tabla: cuentas).
Esta tabla tiene una clave primaria "id" y un campo con el código de la cuenta "cuenta"
Lo hice de la siguiente forma:
DELETE FROM cuenta WHERE id IN (  
SELECT id
FROM (
SELECT cuenta, COUNT(*) AS cnt, id
FROM cuentas AS cue
GROUP BY cuenta ORDER BY cuenta
) AS tmp WHERE tmp.cnt>1
         )

Erwin Vera (Gmail)

unread,
Jun 20, 2017, 12:11:10 PM6/20/17
to mundovis...@googlegroups.com

Buenas tardes

 

No había leído esto, pero mucho cuidado con eliminar los registros con ID iguales, y más sino hay un dato que diferencie uno del otro pues al correr esa rutina que te están enviando, simplemente se van a eliminar de la tabla “cuenta” ambos registros duplicados, pues el WHERE va a ver ambos registros y no sólo uno, esa rutina te sirve, si es el caso, en ver cuales “ID” están duplicados si lo usas en un “SELECT”, para que ese error no te ocurra, debes cambiar tu ID a un campo índice primario para que no se duplique, ya que si tratas de duplicarlo, el mismo motor de BD te lo va a impedir, con eso podrás detectar en que línea de tu sistema estás duplicando el registro, la eliminación creo que deberás hacerla a pie usando una vista con la herramienta que estés usando, SQL o mySQL según corresponda.

Un ejemplo con una tabla temporal en SQL, sería:

create clustered index IxTemp

on #xTemp (nIDINT)

--otro ejemplo (SQL) con un poco mayor información (incluye el “select” con el temporal (INTO #TEMP1):

SELECT AA.GRUPONOM,B.DESGRUCCP, AA.CODTRA,AA.NOMBRE,AA.APELLIDO,AA.FECHA_ING,

       AA.COND_TRA,AA.GRUPO1,AA.FE_EGRESO,CAST(1 AS INT) AS EXISTE

  INTO #TEMP1

  FROM (select A.*,DBO.CodNomAsig(A.CODTRA) AS GRUPONOM

          from remctatra A (NOLOCK)

         where A.cond_tra<>'RE') AS AA LEFT JOIN

       REMGRUCCP B (NOLOCK) ON AA.GRUPONOM=B.CODGRUCCP

         WHERE CODTRA IN

               (SELECT CODTRA FROM REMTRAASO WHERE CODGRUCCP IN (SELECT CODGRUCCP FROM #NomObl ));

 

  create clustered index #IxTempP

  on #TEMP1  (CODTRA,GRUPONOM);

--

_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.


Libre de virus. www.avast.com

Erwin Vera (Gmail)

unread,
Jun 20, 2017, 12:25:48 PM6/20/17
to mundovis...@googlegroups.com

Esa es la vía

En SQL puedes hacer lo mismo que en VFP pero mucho más rápido, seguro y sin muchas limitaciones de las tablas DBF, el asunto es que tienes que ir migrando los desarrollos a manejo de tablas SQL y no VFP, no es difícil pero toma su tiempo!

Saludos

--

_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

Erwin Vera (Gmail)

unread,
Jun 20, 2017, 12:34:06 PM6/20/17
to mundovis...@googlegroups.com

Excelente ejemplo amigo Eduardo

Pero en ese caso debes tener otro campo contra el que comparar, creo que el caso del planteamiento, los datos son idénticos, debería empezar por crear un segundo campo para luego llenarlo de manera que se diferencie cada registro y luego poder correr esa rutina, al final debe escoger el camino que más le convenga y poner el campo ID como primary key

Saludos

 

De: mundovis...@googlegroups.com [mailto:mundovis...@googlegroups.com] En nombre de Eduardo Martinez
Enviado el: viernes, 16 de junio de 2017 18:13
Para: mundovis...@googlegroups.com
Asunto: Re: [Mundo Visual FoxPro] Eliminar un solo registro de los duplicados

 

Personalmente nunca elimino registros de ninguna de mis tablas, en su lugar yo cuento con una columna FechaBaja la cual evaluo en cada consulta y si NULL es falso la dejo de lado.

--


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

Erwin Vera (Gmail)

unread,
Jun 20, 2017, 12:36:16 PM6/20/17
to mundovis...@googlegroups.com

Saludos Carlos

El top existe pero para los select, pero igual me causo ruido tu planteamiento y este fue la respuesta del SQL:

/*------------------------

select * from remhistra (nolock) WHERE codtra='1x2'

DELETE FROM remhistra TOP 1 WHERE codtra='1x2'

------------------------*/

Mens. 156, Nivel 15, Estado 1, Línea 2

Sintaxis incorrecta cerca de la palabra clave 'TOP'.

 

 

Es decir, no se puede usar TOP 1 en un DELETE

 

Saludos

 

 

De: mundovis...@googlegroups.com [mailto:mundovis...@googlegroups.com] En nombre de Carlos Miguel FARIAS
Enviado el: viernes, 16 de junio de 2017 17:08
Para: mundovisualfoxpro <mundovis...@googlegroups.com>
Asunto: Re: [Mundo Visual FoxPro] Eliminar un solo registro de los duplicados

 

No recuerdo si SQL Server cuenta con la clausula TOP u otra equivalente que te permita limitar la cantidad de filas a procesar.

Entonces en el DELETE FROM tuTabla TOP 1 WHERE tus condiciones.

Saludos: Miguel, La Pampa (RA)

El 16 de junio de 2017, 13:35, Alex Orihuela Rosales <alex.orihu...@gmail.com> escribió:

Bueno yo crearía un campo auto incremental, luego elimino el registro que deseo y luego elimino el campo auto incremental.

Saludos.

El 16 de junio de 2017, 10:54, Oscar Bonet <dirsi...@cialta.com> escribió:

 

 

Hola,

Tengo esta inquietud.

Resulta que en SQL-Server 2008  tengo en una tabla dos registros duplicados, es decir ambos con la misma información generada por una falla interna en el sistema, entonces yo identifico estos registros apoyándome en la función y así los encuentro

ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber

Pero como hago para eliminar tan solo un registro de los dos?

 

Gracias y en espera de sus comentarios al respecto,

Atentamente,

 

Oscar

 

 

--

_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

Víctor Hugo Espínola Domínguez

unread,
Jun 20, 2017, 12:52:24 PM6/20/17
to mundovis...@googlegroups.com
Sin modificar la estructura puede traer a VFP los registros repetidos, borrarlos de la tabla y finalmente insertar nuevamente un solo registro de cada grupo repetido. La idea de usar LIMIT o TOP si es soportada esa opción es mejor.

Saludos,
Víctor.
Lambaré - Paraguay.


--


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfoxpro+unsubscribe@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfoxpro+unsubscribe@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfoxpro+unsubscribe@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfoxpro+unsubscribe@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.


Libre de virus. www.avast.com

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:

---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfoxpro+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages