OVH Cloud OVH Cloud

doublons ...

4 réponses
Avatar
arnaud
bonjour,
j'ai une table clients (numcli, nomcli)
par ex,
123 toto
456 tata
123 toto sa

je ne sais pas comment supprimer les doublons sur le numcli.
je voudrais garder seulement la derniere entrée en cas de doublons sur le
numcli
par ex
456 tata
123 toto sa

merci de votre aide
arnaud

4 réponses

Avatar
Fr
Il faut quelque chose qui puisse nous dire quelle est la dernière entrée.

Si tu as un champ compteur (IDENTITY) du genre ID alors je ferais :

Un petit select pour voir ceux que tu garderais (voir si cela correspond
bien à ce que tu veux)

select *
from clients
where id in (SELECT max(id)
from clients
group by numcli)

En effet, le dernier saisi sera celui qui à le plus grand compteur.

Pour supprimer
delete clients
where id NOT in (SELECT max(id)
from clients
group by numcli)


Si tu n'a pas de champs IDENTITY il faut au moins un champ qui donne la date
de création de l'enregistrement du genre DATECREA avec en valeur par défaut
un getdate().
Je ferais alors .... mais là Fred va peut-être crier ;-)) (il y a surement
mieux à faire)

select *
from clients
where cast(numcli as varchar(10)) + cast(datecrea as varchar(20))
in (SELECT cast(numcli as varchar(10)) + cast(max(datecrea) as varchar(20))
from clients
group by numcli)

J'espère avoir éclairé ta lanterne...



"arnaud" a écrit dans le message de
news:cimi5b$o26$
bonjour,
j'ai une table clients (numcli, nomcli)
par ex,
123 toto
456 tata
123 toto sa

je ne sais pas comment supprimer les doublons sur le numcli.
je voudrais garder seulement la derniere entrée en cas de doublons sur le
numcli
par ex
456 tata
123 toto sa

merci de votre aide
arnaud





Avatar
Raphael
J'ai exactement le meme probleme que toi, j'arrive à ne plus avoir de
doublons sur le numcli en fesant GROUP BY numcli mais il me laisse 123 toto
et pas la derniere entrée 123 toto sa... si tu trouves fais le moi savoir
stp merci
"arnaud" a écrit dans le message de
news:cimi5b$o26$
bonjour,
j'ai une table clients (numcli, nomcli)
par ex,
123 toto
456 tata
123 toto sa

je ne sais pas comment supprimer les doublons sur le numcli.
je voudrais garder seulement la derniere entrée en cas de doublons sur le
numcli
par ex
456 tata
123 toto sa

merci de votre aide
arnaud





Avatar
Fred BROUARD
une petite étude sur le sujet :
http://sqlpro.developpez.com/Doublons/Doublons.html

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Raphael a écrit:
J'ai exactement le meme probleme que toi, j'arrive à ne plus avoir de
doublons sur le numcli en fesant GROUP BY numcli mais il me laisse 123 toto
et pas la derniere entrée 123 toto sa... si tu trouves fais le moi savoir
stp merci
"arnaud" a écrit dans le message de
news:cimi5b$o26$

bonjour,
j'ai une table clients (numcli, nomcli)
par ex,
123 toto
456 tata
123 toto sa

je ne sais pas comment supprimer les doublons sur le numcli.
je voudrais garder seulement la derniere entrée en cas de doublons sur le
numcli
par ex
456 tata
123 toto sa

merci de votre aide
arnaud










Avatar
Fred BROUARD
une petite étude sur le sujet :
http://sqlpro.developpez.com/Doublons/Doublons.html

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


a écrit:
Il faut quelque chose qui puisse nous dire quelle est la dernière entrée.

Si tu as un champ compteur (IDENTITY) du genre ID alors je ferais :

Un petit select pour voir ceux que tu garderais (voir si cela correspond
bien à ce que tu veux)

select *
from clients
where id in (SELECT max(id)
from clients
group by numcli)

En effet, le dernier saisi sera celui qui à le plus grand compteur.

Pour supprimer
delete clients
where id NOT in (SELECT max(id)
from clients
group by numcli)


Si tu n'a pas de champs IDENTITY il faut au moins un champ qui donne la date
de création de l'enregistrement du genre DATECREA avec en valeur par défaut
un getdate().
Je ferais alors .... mais là Fred va peut-être crier ;-)) (il y a surement
mieux à faire)

select *
from clients
where cast(numcli as varchar(10)) + cast(datecrea as varchar(20))
in (SELECT cast(numcli as varchar(10)) + cast(max(datecrea) as varchar(20))
from clients
group by numcli)

J'espère avoir éclairé ta lanterne...



"arnaud" a écrit dans le message de
news:cimi5b$o26$

bonjour,
j'ai une table clients (numcli, nomcli)
par ex,
123 toto
456 tata
123 toto sa

je ne sais pas comment supprimer les doublons sur le numcli.
je voudrais garder seulement la derniere entrée en cas de doublons sur le
numcli
par ex
456 tata
123 toto sa

merci de votre aide
arnaud