cs_yubi
Messages postés4Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention 8 décembre 2004
-
6 déc. 2004 à 13:54
cs_yubi
Messages postés4Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention 8 décembre 2004
-
8 déc. 2004 à 12:03
Salut a tous,
Le but :
Dans une table de clients (chaque client est identifie par une chaine de carateres (concatenat) composeé de plusieurs informations sur le client: 2 premieres lettre du nom de famille + 2 premieres lettre de la rue etc..) j'effectue une recherche qui me donne les doublons à partir de ces concatenats. Chaque enregistrement est associé a une date de modification. Je voudrai supprimer lenregistrement dont la date de modification est la plus ancienne.
Par exemple :
concatenat datemodif
PARU2TR 16/02/04
PARU2TR 18/03/04
On garde la deuxieme entrée et on supprime la premiere.
J'ai une partie de la requete qui me permet à partir de la table client d'obtenir tous les doublons :
SELECT [concatenat], [DateModif]
FROM rBase
WHERE [concatenat] In (SELECT [concatenat] FROM [rBase] As Tmp GROUP BY [concatenat] HAVING Count(*)>1 )
ORDER BY [concatenat];
En fait j ne connais pas la syntaxe exacte pour pouvoir comparer a l'interieur d'une meme table deux dates du meme champs....
glplpmat
Messages postés70Date d'inscriptionmercredi 11 juin 2003StatutMembreDernière intervention 2 octobre 20061 6 déc. 2004 à 17:10
En oracle :
DELETE rBase WHERE ( concatenat, DateModif) IN
(SELECT concatenat,min(datemodif) AS datemodif FROM rBase WHERE concatenat]IN (SELECT concatenat FROM rBase As Tmp GROUP BY concatenat HAVING Count(*)>1 ))
cs_yubi
Messages postés4Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention 8 décembre 2004 8 déc. 2004 à 12:03
REuh les gens,
Merci pour ton aide glplpmat.
En fait j'ai procede autrement puisque je ne pouvais effacer les entrées directement; il fallait d'abord que je recupere des infos dessus pour les updater par la suite.
UN deuxieme probleme se pose alors:
UPDATE rBaseDoublons AS Bd SET Bd.Téléphone = Bd2.Téléphone
WHERE ( SELECT concatenat FROM rBaseDoublons Bd2 WHERE Bd.concatenat = Bd2.concatenat AND (Bd.Clé > Bd2.Clé) AND (Bd.Téléphone IS NULL));
J'aimerai qu'il copie le num de tel. ds le champs correspondant o cas ou ce champs est vide. Donc la requete recupere lancien numero et le copie ds le champs correspondant. Le probleme est qu'il me demande de lui donner un numero o moment de lancer la requete alors qu'il doit la recuperer.
Pour un autre champs j'ai procede de la meme facon et ca marche :
UPDATE rBaseDoublons AS Bd SET Bd.[Fichier Thiot Consowin] = True
WHERE ( SELECT concatenat FROM rBaseDoublons Bd2 WHERE Bd.concatenat = Bd2.concatenat AND (Bd.Clé > Bd2.Clé) AND (Bd2.[Fichier Thiot Consowin]=True));
LA difference c'est qu'il s'agit ici d'une update dont la valleur est constante....
Comment faire pour une valeur dynamique??????
Merci d'avance