Page 1 sur 2

pb avec les doublons

Posté : 26 juil. 2005, 11:21
par djoole
Bonjour à tous

Voila mon problème : je cherche à éliminer des doublons sur certains champs lors de ma requête, mais pas sur les autres ...


Je m'explique : en fait dans ma base j'ai ça

id centre zone nb_anomalies date
1 8v d8 0 2005-07-25
2 8v d8 4 2005-07-26
3 8v d8 6 2005-07-26
4 f 1k 0 2005-07-26
5 f vv 2 2005-07-26
6 f vv 4 2005-07-26


et je voudrais ça :

id centre zone nb_anomalies date
3 8v d8 6 2005-07-26
4 f 1k 0 2005-07-26
6 f vv 4 2005-07-26


Merci pour votre aide[/b]

Posté : 26 juil. 2005, 11:24
par pjl
regarde du coté de DISTINCT et de GROUP BY.

Posté : 26 juil. 2005, 13:32
par djoolio
mais avec le distinct on ne peut pas choisir sur quel champ il va agir et pas sur d' autres.

En fait : select distinct centre,zone,date.......

Ca va faire un distinct suivant ces trois champs alors que moi je veux qu'il le fasse que sur les deux premiers.

Posté : 26 juil. 2005, 14:02
par pjl
et GROUP BY ?

Posté : 26 juil. 2005, 14:27
par zeus
Et si tu fait

Code : Tout sélectionner

SELECT DISTINCT(centre, zone), date FROM ...

Posté : 26 juil. 2005, 14:49
par Invité
Et si tu fait

Code : Tout sélectionner

SELECT DISTINCT(centre, zone), date FROM ...
G déjà essayé ça et ça ne marche pas.

Posté : 26 juil. 2005, 15:01
par djoolio
En fait j'arrive à les récupérer grâce à un group by et un max en faisant :

Code : Tout sélectionner

SELECT centre,zone, MAX(id) AS id FROM MaTable GROUP BY centre,zone
Mais lorsque que je fais des jointures avec d'autres tables et que j'ai besoin d'un autre group by alors ça me fausse tout.

Si quelqu'un a une autre solution?

Posté : 26 juil. 2005, 15:03
par zeus
mais avec le distinct on ne peut pas choisir sur quel champ il va agir et pas sur d' autres.

En fait : select distinct centre,zone,date.......

Ca va faire un distinct suivant ces trois champs alors que moi je veux qu'il le fasse que sur les deux premiers.
Donne nous une description un peu plus précise de ce que tu veux faire et on aura peut etre une idée ...

Posté : 26 juil. 2005, 15:26
par djoole
En fait j'ai une table Audit avec

id_audit centre zone nb_ano date_audit
1 8v d8 0 2005-07-25
2 8v d8 4 2005-07-26
3 8v d8 6 2005-07-26
7 f1 1k 0 2005-07-26
8 f vv 2 2005-07-26
9 f vv 4 2005-07-26

et par exemple pour les 3 premiers audit c'est le même mais il a évolué au cours du temps et j'ai besoin de garder l'historique.
Mais j'ai une autre table qui pour chaque audit je vois quel anomalie il a

id_audit id_ano
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
3 5
3 6
8 2
8 4
9 2
9 4
9 7
9 8

Au final ce que je voudrais c'est compter pour chaque id_ano combien il y en a

par exemple :
pour l'id_ano "4" j'en rencontrerais seulement que 2 fois

Je sais pas si c vraiment clair mais voila le problème dans sa totalité.

Posté : 26 juil. 2005, 15:35
par zeus
Dans ton exemple, j'ai 4 enregistrements dont id_anno = 4 :shock:

Posté : 26 juil. 2005, 15:42
par djoole
Désolé j'ai mal expliqué.
Mais en fait vu que chaque audit évolue au cours du temps au final ce qui m'intéresse dans la seconde table c'est son dernier état donc dans notre exemple l'audit 3 et l'audit 9.
Et la on s'aperçoit que l'id_ano "4" apparait deux fois.

Je sais si c un peu plus clair ou pas.

Posté : 26 juil. 2005, 15:49
par zeus
Je suis désolé mais je ne comprend pas :shock:

Pourquoi 3 et 9 ? si l'état ne bouge pas, je dirais 2 et 9.

L'audit 3 à un 5 et 6 ?

Posté : 26 juil. 2005, 16:00
par djoole
id_audit centre zone nb_ano date_audit
1 8v d8 0 2005-07-25
2 8v d8 4 2005-07-26
3 8v d8 6 2005-07-26
8 f vv 2 2005-07-26
9 f vv 4 2005-07-26


id_audit id_ano
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
3 5
3 6
8 2
8 4
9 2
9 4
9 7
9 8
En fait l'id_audit change(au départ "8v d8" avait 0 anomalie puis il en a eu 4 et c'est devenu l'id_audit 2 puis il a eu 6 anomalie et c'est devenu l'id_audit 3) mais celui qui m'interesse c'est l'id_audit 3.
Donc dans ma seconde table quand je vais faire des calculs ça sera que sur l'id_audit 3 et l'id_audit 9.

Posté : 26 juil. 2005, 16:05
par zeus
essaye ça :

Code : Tout sélectionner

SELECT id_audit FROM table GROUP BY centre HAVING id_audit=MAX(id_audit)

Posté : 26 juil. 2005, 16:09
par Invité
Si tu veux c'est d'avoir en mémoire l'évolution d'un audit qui m'emmerde car je ferais un update et je changerais le nb_ano quand celui_ci changerait.
En laissant l'historique si je compte les différentes anomalies il me les répète à chaque fois que l'audit a évolué.