Bonjour à tous,
Je suis actuellement en train de faire la gestion des formations des employés d'une entreprise sur access.
Je dois donc, pour certains employés, sortir une carte d'autorisation de conduite d'engins de chantier (caces, etc...), sur laquelle je dois faire figurer la liste des formations qu'ils ont passées, avec le libellé raccourci de la formation, la date d'obtention et la date de validité (les formations ne sont valides que 5 ou 10 selon ces dernières).
J'ai donc plusieurs tables dans ma base :
(Merci de ne pas critiquer les accents, espaces et autres ponctuations bizarres sur les noms des tables et des champs, ce n 'est pas moi qui les ai fait :)
Donc je tente de faire la liste des formations pour un employé précis, après je me débrouillerai pour les autres ; il faut donc les trois champs mentionéees ci-dessus, à savoir "abréviation", "date session", "à refaire avant le :", où abréviation est l'abréviation du libellé de la formation.
J'avais donc fait cette requête là:
Or il se trouve que quand je fais ça, il me sort toutes les mêmes formations, je m'explique : par exemple, si une formation se périme en 2011 et que la formation pour la refaire a été faite en 2011, il me sortira ces deux formations. Le problème est que je ne veux seulement qu'une seule formation (à savoir celle réalisée il y a le moins longtemps, donc la plus récente) par type de formation (ne pas avoir deux fois caces r372M, etc..).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT abréviation, [intervenant (société)], [date session], [à refaire avant le :], [code salarié] FROM [liste des salariés] AS ls, [liste des formations] AS lf, [sessions de formation] AS sf, [session-participants] AS sp, intervenants AS i WHERE ls.[code salarié] = sp.[rappel code salarié] AND sp.[rappel n° session] = sf.[n° session] AND sf.[rappel n° formation] = lf.[n° formation] AND i.[n° intervenant] = sf.[n° intervenant] AND abréviation Is Not Null AND [présence salarié] = "présent" AND year([à refaire avant le :]) >= year(date()) ORDER BY [date session], abréviation;
J'ai tenté un millier de requêtes avec des "distinct", des "max", il me sort toujours deux formations identiques mais qui ont des dates différentes, à cause du group by.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT abréviation, [date session], [à refaire avant le :] FROM [liste des salariés] ls, [session-participants] sp, [liste des formations] lf, [sessions de formation] sf WHERE ls.[code salarié] = sp.[rappel code salarié] AND sp.[rappel n° session] = sf.[n° session] AND lf.[n° formation] = sf.[rappel n° formation] AND [code salarié] = "1015" AND abréviation is not null GROUP BY abréviation, [date session], [à refaire avant le :]
Ce qui me donne :
Il faudrait donc que le "Caces catégorie 3B R386 n'apparaisse qu'une fois, avec la date de validité la plus récente.
Or quand je fais la même requête en supprimant simplement le "[à refaire avant le :]", la requête fonctionne et ne me met que 6 résultats au lieu de 7, mais je n'ai pas d'informations concernant la date de validité, c'est donc un peu le bazar...
Quelqu'un pourrait-il m'aider s'il vous plaît ?
Cordialement,
Anthony
Partager