J’ai donc une table du genre:
Compagnie,code,date
10,1,01.01.2006
10,1,01.01.2007
10,1,01.01.2008
10,2,01.01.2007
20,1,01.01.2007
20,1,01.01.2008
Et je souhaiterais supprimer les doublons compagnie/code mais en gardant le ligne la plus vieille.
Dans mon exemple je supprimerais donc les lignes suivantes:
10,1,01.01.2007
10,1,01.01.2008
20,1,01.01.2007
Une idée comment faire?
Avec une sous-requête effectuant un WHERE COUNT(Id) > 1 ?
Une telle requête de donnerait uniquement les compagnie/code en doublon, or je ne doit pas tous les supprimer.
select compagnie, code, min(date), count(*) theCount from matable
group by compagnie, code
having theCount >1
Ca doit déjà te rapprocher
Encore un peu de code à tester ^^
La table Comp c’est ta table principale.
[code]create table #temp (compagnie int,
code int,
date datetime)
insert into #temp (compagnie, code, date)
select compagnie, code, min(date) from Comp
group by compagnie, code
delete from Comp
where date <> (select t.date from #temp t where Comp.compagnie = t.compagnie and Comp.code = t.code)[/code]
En sortie j’obtiens ça :
10 1 2006-01-01 00:00:00.000
10 2 2007-01-01 00:00:00.000
20 1 2007-01-01 00:00:00.000
Ca y est, j’ai trouvé la requête.
DELETE tableT FROM tableT
INNER JOIN (SELECT compagnie a,code b,MIN(date) c,COUNT(*) d FROM tableT WHERE GROUP BY compagnie,code HAVING COUNT(*)>1) AS result
ON compagnie=a AND code=b AND date<>c
Merci à girafologue de m’avoir mis sur la voie