Enlever doublon dans une requête mais avec 4 champs [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012
-
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012
-
Bonjour,

J'ai un sérieux problème.

Je cherche a ne pas afficher des doublons dans une requête Access par le champ ou contient une date modifiable.

Voici ma table (Archive):
Numéro auto (NUM)
Le numéro de l'employé (Matricule)
La date de l'entrée (DateNote)
Une note (Note)

Il se peut qu'un employé ait plusieurs note à son dossier. Donc dans ma requête, je veux qu'il n'affiche qu'une fois l'employé mais avec la date la plus récente dans la colonne DateNote de la table Archive. La date peut par compte changer dans un enregistrement et c'est pour cela que je dois me fichier au champ DateNote. Donc une note (un enregistrement) par Matricule.

J'ai:
NUM Matricule DateNote Note
1 100 2011-10-01 note1
2 100 2011-12-19 note2
3 200 2012-01-05 note3
4 300 2011-11-01 note4
5 300 2011-10-20 note5

Et j'ai besoin qu'il m'affiche:
NUM Matricule DateNote Note
2 100 2011-12-19 note2
3 200 2012-01-05 note3
4 300 2011-11-01 note4

J'ai essayé les fonctions Premier, Dernier, DISTINCT, etc... et ça ne fonctionne pas.

Merci!

11 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
294
Bonjour,

Avec Distinct, ca devrait fonctionner, peux tu nous montrer ta requête ? Et préciser ce que tu entends pas "ne fonctionne pas"
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
49
Salut

 command.CommandText = "SELECT * FROM Archive WHERE DateNote IN (SELECT  MAX (DateNote) FROM Archive GROUP BY Matricule) ; "
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonsoir,

ça devrait marcher avec:

SELECT Archive.Matricule, Max(Archive.DateNote) AS MaxDeDateNote, Last(Archive.Note) AS DernierDeNote
FROM Archive
GROUP BY Archive.Matricule;


[] Ce qui va sans dire. va mieux en le disant.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
49
bigacess

j'ai répondu selon ton ex
ça fonctionne oui j'ai testé avant de poster
Si il n'y a pas de date dans DateNote


je veux qu'il n'affiche qu'une fois l'employé mais avec la date la plus récente


comment veux tu faire une requette si le champ
datenote ne contient pas de date
soit tu t'es mal expliqué
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012

ShayW,

En fait il se peut qu'un employé ait une note à son dossier mais qu'il n'y ait pas de date pour cette note.

Donc on doit considérer que la note sans date est la plus vieille.

Je sais que c'est un peu bizarre mais ce sont des notes qui date de longtemps et il faut quand même les conserver, mais malgré tout dans cette requête je dois afficher la dernière note, par date, d'ou le DateNote.

Si l'employé qui n'a pas de date obtient une autre note avec une date, cette celle avec la date qui devrait s'afficher dans la requête et l'autre restera seulement dans la table et ainsi de suite...

Merci.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
SELECT Archive.Matricule, Max(Archive.DateNote) AS MaxDeDateNote, Last(Archive.Note) AS DernierDeNote
FROM Archive
GROUP BY Archive.Matricule
HAVING (([Archive]![DateNote] Is Not Null And [Archive]![Note] Is Not Null));

[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Cette fois, c' est la bonne..
Il ne te demandera rien !

SELECT Archive.Matricule, Max(IIf(IsNull([Archive]![DateNote]),0,[Archive]![DateNote])) AS DateNote, Last(IIf(IsNull([Archive]![Note]),0,[Archive]![Note])) AS [Note]
FROM Archive
GROUP BY Archive.Matricule;




[] Ce qui va sans dire. va mieux en le disant.
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012

Salut LIBRE_MAX,

Ça ne fonctionne pas.

Il met bien la dernière date de DateNote mais la note ne suit pas.

Jai :
NUM Matricule DateNote Note
1 100 2011-10-01 note1
2 100 2011-12-19 note2
3 200 2012-01-05 note3
4 300 2011-11-01 note4
5 300 2011-10-20 note5

Et mettons pour le Matricule 300 il affiche 2011-11-01 note 5 alors que la note 5 fait partie de l'enregistrement du 2011-10-20. Donc pas la bonne note de la bonne date.
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012

Salut LIBRE_MAX,

Ça ne fonctionne pas une fenêtre s'ouvre en exécutant la requête et me demande d'entrer une valeur mais elle doit s'exécuter dans demander de valeur. De plus, les dates ne s'affichent plus dans la colonne de date.

Et il n'affiche pas l'enregistrement de la plus grande date entrée dans le champ date.

Julien39 : Distinct déjà essayé et ça ne fonctionne pas.

ShayW Ça fonctionne mais comment afficher les enregistrements si il n'y pas pas de date dans le champs DateNote pour un employé. La requête n'affiche que les enregistrements qui ont une date.

Merci!
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012

ShayW : Si il n'y a pas de date dans DateNote, la valeur de cette enregistrement est la plus vieille. C'est comme si on dit : Pas de date = date la plus vieilleé

Merci.
Messages postés
23
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
30 juillet 2012

Même avec des dates au lieu de 0 dans le champ j'ai le même problème.