Oracle sql : Mettre a jour que les doublons
Bjr,
Je désire mettre a jour un champ oracle (statut) que sur les doublons et sur les dates les moins recentes.
Code:
1 2 3 4 5 6 7 8 9
| -tableA-
objet date statut
voiture 02/03/2011 2
voiture 02/02/2011 2
voiture 02/04/2011 2
velo 02/04/2011 2
velo 02/05/2011 2 |
afin d'obtenir
Code:
1 2 3 4 5 6 7 8 9
| -tableA-
objet date statut
voiture 02/03/2011 3
voiture 02/02/2011 2
voiture 02/04/2011 3
velo 02/04/2011 2
velo 02/05/2011 3 |
1-
Je pense créer une table temporaire et copier les doublons les plus vieux avec leur rowid respectifs.
Code:
1 2 3 4 5
| select rowid from tableA a where rowid > (
select min(rowid)
from tableA b
where b.objet= a.objet
); |
ou
Code:
1 2 3 4 5
| select * FROM tableA
WHERE ROWID NOT IN (
SELECT max(ROWID)
FROM tableA GROUP BY objet HAVING count(objet)>1
); |
2-
puis mettre a jour le statut la table d'origine en recherchant par rowid
merci de vos réponses.
cas doublon avec jointure
Bjr,
si je dois faire une dedoublonnage avec une jointure sur une autre table
cad tableb ou j'ai des identiants unique .
Code:
1 2 3 4 5 6 7 8 9
| -tableB-
objet date statut
voiture 02/03/2011 2
voiture 02/02/2011 2
voiture 02/04/2011 2
velo 02/04/2011 2
velo 02/05/2011 2 |
je dois faire cela ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| UPDATE tableA SET STATUS='D'
WHERE rowid IN
( SELECT rid
FROM (
SELECT rowid rid,
row_number() over
(partition BY obj ORDER BY dat DESC) rn
FROM tableA,tableb
where a.obj=b.obj
)
WHERE rn > 1
); |