Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Borrar registros duplicados evaluando varios campos (https://www.clubdelphi.com/foros/showthread.php?t=91797)

newtron 28-04-2017 20:10:54

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.



luisgutierrezb 29-04-2017 00:32:13

Este enlace te puede servir...

https://geeks.ms/lmblanco/2015/07/06...-sql-server-1/

newtron 29-04-2017 10:07:46

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.....

Casimiro Notevi 29-04-2017 11:36:06

Creo que tendrás que hacer un 'stored procedure'.

newtron 29-04-2017 11:45:01

Cita:

Empezado por Casimiro Notevi (Mensaje 516113)
Creo que tendrás que hacer un 'stored procedure'.

A mi no me hables raro, ein? :D:D:D

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

Gracias y un saludo

manelb 29-04-2017 12:26:15

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?

newtron 29-04-2017 12:43:00

Cita:

Empezado por manelb (Mensaje 516116)
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

manelb 02-05-2017 17:54:24

Una sentencia como la siguiente tendría que funcionar para lo que quieres hacer...

Casimiro Notevi 02-05-2017 18:28:14

Cita:

Empezado por manelb (Mensaje 516192)
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.

newtron 02-05-2017 18:35:53

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

Casimiro Notevi 02-05-2017 18:38:27

Por favor, que alguien la ponga :o

newtron 02-05-2017 18:41:53

Cita:

Empezado por Casimiro Notevi (Mensaje 516195)
Por favor, que alguien la ponga :o

:D:D:D:D:D:D:D:p

newtron 02-05-2017 18:42:56

Te iba a pedir un rescate pero bueno... por esta vez lo dejaremos pasar. :D:D

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


manelb 02-05-2017 18:53:43

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...

Casimiro Notevi 02-05-2017 18:57:09

Cita:

Empezado por manelb (Mensaje 516198)
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 ^\||/


La franja horaria es GMT +2. Ahora son las 02:51:17.

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