Bloquer sur une requete

[Résolu]
Signaler
Messages postés
4
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
8 décembre 2004
-
Messages postés
4
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
8 décembre 2004
-
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....

Merci d'avanc pour votre aide.

2 réponses

Messages postés
70
Date d'inscription
mercredi 11 juin 2003
Statut
Membre
Dernière intervention
2 octobre 2006
1
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 ))

glplpmat
Messages postés
4
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
8 décembre 2004

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