|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
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à: Code :
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 :
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 |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
regardez du coté de la clause HAVING
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
et pensez, pour les jointures, à utiliser la syntaxe "moderne", i.e. celle utilisant le INNER JOIN pour les requêtes internes.
Cela rend (entres autres) la lecture des requêtes, et donc leurs analyses, plus faciles
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Bonjour, j'ai déjà essayé avec le having et le résultat est le même...
Sinon pour les jointures, je m'excuse mais j'ai commencé la programmation l'année dernière et on nous a appris à les faire de cette manière en cours... je ne comprends rien au inner join etc... Merci quand même pour vos réponses
|
|
|
00
|
|
|
#5 | |||||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Citation:
![]() exemple pour le INNER JOIN au lieu de : Code :
Code :
et pour problème plus direct. Pourquoi ne pas exclure les "formations" dont la "date de validité" est dépassée ? cela éliminerait la formation du 11/10/2009 |
|||||
|
|
10
|
|
|
#6 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Car les secrétaires veulent garder les formations se terminant dans l'année, vu que quand une formation arrive à échéance, le salarié a l'année entière pour la refaire.
Sinon je l'avais déjà fait et c'est vrai que ça marche, sauf si la formation se termine durant la même année que commence la nouvelle.
|
|
|
00
|
|
|
#7 | |||||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
on peut évidemment faire des trucs un peu plus fin pour cette sélection
, ex Code :
Code :
mais dans ce cas, la même formation peut apparaitre plusieurs fois, et c'est normal... Citation:
|
|||||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Oui je l'avais fait, mais l'idéal serait que la formation la plus récente n'apparaisse qu'une fois par type de formation. Je me débrouille toujours en SQL en temps normal mais il est vrai que pour cette problématique là je n'y arrive pas, et je ne vois surtout pas comment faire, ayant quasiment tout essayé.
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Bonjour,
quel est votre SGBD ? |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Bonjour,
Je travaille actuellement sur Access 2007 |
|
|
00
|
|
|
#11 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour PunkOff, cela sent le access
et en utilisant une sous-requête ? Code :
c'est juste une piste
|
||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Et je mettrais quoi dans le sous-requête de sélection ??
PS: j'ai déjà essayé les requêtes imbriquées et même avec ça ça ne marche pas
|
|
|
00
|
|
|
#13 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
je voyais tout bêtement, je dis bien tout bêtement
, celle-là (celle que tu utilisais) :Code :
|
||
|
|
00
|
|
|
#14 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Pourrais-tu fournir un script de cette partie avec quelques données ?
afin de créer cette base et la tester |
|
|
00
|
|
|
#15 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
J'ai donc essayé de faire la requête donnée par un membre du forum,
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com