Bloquer sur une requete [Résolu]

cs_yubi 4 Messages postés lundi 15 mars 2004Date d'inscription 8 décembre 2004 Dernière intervention - 6 déc. 2004 à 13:54 - Dernière réponse : cs_yubi 4 Messages postés lundi 15 mars 2004Date d'inscription 8 décembre 2004 Dernière intervention
- 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....

Merci d'avanc pour votre aide.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
glplpmat 70 Messages postés mercredi 11 juin 2003Date d'inscription 2 octobre 2006 Dernière intervention - 6 déc. 2004 à 17:10
3
Merci
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

Merci glplpmat 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de glplpmat
cs_yubi 4 Messages postés lundi 15 mars 2004Date d'inscription 8 décembre 2004 Dernière intervention - 8 déc. 2004 à 12:03
0
Merci
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
Commenter la réponse de cs_yubi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.