Il faudrait peut etre préciser pourquoi ces matricules ne remontent pas, car comme on ne dispose pas de la requête difficile de deviner. Je suppose que cette requête a un filtre de type:
date debut qualité >= date rapport && date fin qualité <= date rapport
et également
date debut contrat>=date rapport && date fin contrat <= date rapport
L'accés à la table contrat est il en jointure externe? Je suppose que oui sinon je ne vois pas comment les agents qui n'ont jamais été contractuels remonteraient. Mais dans ce cas il faudrait qu'on sache pourquoi ceux qui ont été contractuels et ne le sont plus ne remontent pas, car même si le 2em filtre ci dessus retourne faux ça ne devrait pas bloquer... Il faudrait donc un peu plus d'infos.
Sinon de manière générale comme tu peux le constater ce type de modélisation de référentiel historisé n'est pas du tout adapté au décisionnel, et tout particulièrement dans le domaine RH: quoi que l'utilisateur fasse il sera toujours poursuivi par ces date-deb date-fin sur toutes les tables impliquées, des problématiques de jointure externes etc. pour créer des rapports.
Une bonne solution est l'utilisation de la technique des situations chères à Ralph Kimball. Dans ton exemple, créer une table "Situation matricule" qui contient 2 clés étrangères techniques (Situation contrat et Situation qualité) , l'identifiant matricule, et date-deb/date-fin. Toute la complexité est reportée sur la création de cette table, les rapports sont ensuite un vrai bonheur à construire puisque il n'y a plus de dates dans les jointures. Pour information l'entrepôt RH du plus gros employeur public français a été construit en partie avec cette méthode.
Partager