|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2003 Messages : 376 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() |
Donne la structure exacte de tes tables.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Il faut faire une jointure avec une table "calendrier" qui contiendra la liste de tous les jours ouvrés depuis que tes salariés travaillent.
Tu peux la simuler à l'aide une pirouette (sous Oracle, on peut utiliser conect by pour faire une requête récursive entre deux dates par exemple, mais WITH qui est plus standard le permet aussi). Mais dans tous les cas, tu auras quand même besoin d'un calendrier pour les congés des salariés et les jours fériers... |
|
|
00
|
|
|
#4 |
![]() ![]() |
Je ne pense pas qu'il y ait besoin ici d'un calendrier. Il s'agit de comparer une date de début de niveau pour un salarié et une date de début de période d'un coût horaire pour un niveau. Il ne cherche pas à afficher toutes les dates et les données qui correspondent à certaines dates.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#5 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Hmm, effectivement, moi j'étais parti du principe qu'il allait devoir afficher les salaires mensuels des employés
|
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2003 Messages : 376 ![]() |
Tiens, j'ai cru mon message sans réponses, je n'ai pas reçu de mail lors de vos interventions
CinePhil a très bien compris l'énoncé. ...et moi j'ai toujours pas trouvé comment faire en SQL, donc j'ai fait un joli programme en java, avec les classes qu'il faut. Pas très dur. Donc problème résolu, pas de solution à part pondre du code pas dur mais plus long à faire qu'une belle requête qui sort tout d'un coup. Voili voilou |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com