Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Borrar registros duplicados evaluando varios campos

Hola a tod@s.

Necesitaría una consulta SQL para eliminar registros duplicados evaluando varios campos y manteniendo el que tenga la fecha más reciente. Por ejemplo, tengo estos registros:

CLIENTE ARTICULO FECHA
000001 001 01/01/2017
000002 001 01/02/2017
000001 001 15/01/2017
000002 001 31/01/2017

necesitaría borrar los registros que tengan duplicados el campo cliente y artículo y, dentro de eso, que los registros que se eliminen sean los de fecha más antigua y mantenga el más reciente. En este ejemplo tendría que borrar el primer y cuarto registro.

Gracias y un saludo.


__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 29-04-2017
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 20
luisgutierrezb Va por buen camino
Este enlace te puede servir...

https://geeks.ms/lmblanco/2015/07/06...-sql-server-1/
Responder Con Cita
  #3  
Antiguo 29-04-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Gracias Luis, a partir de esa página he construido esta instrucción:

Código:
SELECT * FROM TABLA
WHERE CLIENTE+ARTICULO IN (
   SELECT CLIENTE+ARTICULO
   FROM TABLA
   GROUP BY CLIENTE,ARTICULO
   HAVING COUNT(*) > 1
)
ORDER BY CLIENTE,ARTICULO,FECHA
El problema es que me saca TODOS los registros y yo quiero eliminar el duplicado de fecha más antigua y de esta manera creo que no podré hacerlo. Necesitaría una consulta en la que no dependiera del "ORDER" para poder hacer un "DELETE" solo de los registros duplicados manteniendo el de fecha más reciente.

Seguimos mirando.....
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 29-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que tendrás que hacer un 'stored procedure'.
Responder Con Cita
  #5  
Antiguo 29-04-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que tendrás que hacer un 'stored procedure'.
A mi no me hables raro, ein?

Viendo que estaba la cosa complicada estoy haciendo un pequeño programa.

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 29-04-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 297
Poder: 8
manelb Va por buen camino
Yo creo que esposible hacerlo en una sola sentencia.
Otra cosa el rendimiento que pueda tener.

Estoy fuera el fin de semana y no tengo ordenador, si no te urge mucho el martes lo pruebo y te gigo algo.
Que base de datos utilizas?
Responder Con Cita
  #7  
Antiguo 29-04-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por manelb Ver Mensaje
Yo creo que esposible hacerlo en una sola sentencia.
Otra cosa el rendimiento que pueda tener.

Estoy fuera el fin de semana y no tengo ordenador, si no te urge mucho el martes lo pruebo y te gigo algo.
Que base de datos utilizas?
Gracias por tu interés, ya he preparado un pequeño programita para esa tarea.

De todas formas si te apetece hacerlo y ya me lo guardo la base de datos es ElevateDB, no es muy conocida pero es compatible SQL 2003.

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #8  
Antiguo 02-05-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 297
Poder: 8
manelb Va por buen camino
Una sentencia como la siguiente tendría que funcionar para lo que quieres hacer...

Última edición por Casimiro Notevi fecha: 02-05-2017 a las 19:28:07.
Responder Con Cita
  #9  
Antiguo 02-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por manelb Ver Mensaje
Una sentencia como la siguiente tendría que funcionar para lo que quieres hacer...
Creo que te has liado con la sentencia, he borrado los mensajes para que puedas ponerla bien.
Responder Con Cita
  #10  
Antiguo 02-05-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Manel.

Gracias por la instrucción. Parece que funciona correctamente y no es excesivamente lenta. De una forma o de otra el rendimiento tampoco me importa demasiado porque es para usarla muy puntualmente.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #11  
Antiguo 02-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, que alguien la ponga
Responder Con Cita
  #12  
Antiguo 02-05-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Por favor, que alguien la ponga
__________________
Be water my friend.
Responder Con Cita
  #13  
Antiguo 02-05-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Te iba a pedir un rescate pero bueno... por esta vez lo dejaremos pasar.

Código:
Select * From CLIARTI T1
Where Exists (select *
From CLIARTI T2
Where T1.cliente=t2.cliente And
T1.articulo=t2.articulo And
T1.fechaUV<t2.fechaUV)
ORDER BY CLIENTE,ARTICULO,FECHAUV
__________________
Be water my friend.
Responder Con Cita
  #14  
Antiguo 02-05-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 297
Poder: 8
manelb Va por buen camino
Perdona Casimiro, pero me ha pasado dos veces que al poner "Resaltar sintaxis sql" me cortaba la sentencia en la última línea, por eso la he puesto directamente en mi tercer post.
En la vista previa se veia bien...
Responder Con Cita
  #15  
Antiguo 02-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por manelb Ver Mensaje
Perdona Casimiro, pero me ha pasado dos veces que al poner "Resaltar sintaxis sql" me cortaba la sentencia en la última línea, por eso la he puesto directamente en mi tercer post.
En la vista previa se veia bien...
Vaya, qué raro.
Bueno, ya la ha puesto newtron.
Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema al borrar varios registros giocatore Conexión con bases de datos 6 27-04-2011 07:36:02
Borrar varios registros en un Dbrepeater David82 PHP 0 09-09-2008 14:40:37
Borrar datos duplicados Sr.Scorpion Conexión con bases de datos 4 20-06-2005 20:52:57
Borrar duplicados jefraub SQL 2 22-03-2005 18:48:06
Borrar registros duplicados. Adrian Murua Firebird e Interbase 3 07-10-2003 07:28:46


La franja horaria es GMT +2. Ahora son las 00:56:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi