Salut,
j'ai un problème SQL un peu tordu, je viens voir si l'un ou l'une d'entre vous y voit une solution.
J'ai les tables suivantes
Salarié :
- Jean
- Paul
- Pierre
Niveau :
- Stagiaire
- Débutant
- Confirmé
- Expert
- Chef
Historique Niveau :
- Jean, Stagiaire, 01/01/2010
- Jean, Débutant, 01/07/2010
- Jean, Confirmé, 01/01/2011
- Paul, Expert, 01/01/2008
- Paul, Chef, 01/01/2011
- Pierre, Expert, 01/01/2010
Coût De Revient Horaire Par Niveau :
- Stagiaire, 40€, 01/01/2008
- Stagiaire, 42€, 01/01/2009
- Débutant, 50€, 01/01/2008
- Débutant, 53€, 01/01/2010
- Débutant, 55€, 01/07/2011
- Confirmé, 70€, 01/01/2010
- Confirmé, 73€, 01/07/2011
- ...
J'aimerais retracer le coût de revient d'un salarié. Je l'imagine ainsi :
- liste des niveaux du salarié, par ordre décroissant (select * from historique_niveau where salarie='Jean')
- pour chaque niveau trouvé, connaître les évolutions de coût de revient qui concernent le salarié... et là ça se complique
Je veux la dernière valeur <= au jour où le salarié est passé au niveau donné
ainsi que toutes les valeurs > au jour d'entrée dans le niveau, et <= au jour d'entrée dans le niveau suivant s'il y a lieu.
Dans l'exemple de Jean :
- Stagiaire en janvier 2010 -> 42€ (coût en vigueur depuis 2009)
- Débutant en juillet 2010 -> 53€ (coût en vigueur de janvier 2010 à juillet 2011)
- Confirmé en janvier 2011 -> 70€ (coût en vigueur de janvier 2010 à juillet 2011)
- Confirmé ... -> 73€ (coût en vigueur depuis juillet 2011)
Par programmation je vois très bien comment le faire avec l'algorithme décrit plus haut, mais en SQL pur je ne vois pas.
Existerait-il une solution ?
Je suis en MySQL 5
Partager