Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 14h00   #1
Membre confirmé
 
Avatar de iubito
 
Homme
Développeur informatique
Inscription : janvier 2003
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 376
Points : 244
Points : 244
Par défaut Récupérer la 1e ligne ou celles > à une date

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
__________________
Compatibilité CSS | Hacks CSS IE | IE7

Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 14h15   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h24   #3
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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...
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 17h16   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 19h27   #5
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Hmm, effectivement, moi j'étais parti du principe qu'il allait devoir afficher les salaires mensuels des employés
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 11h32   #6
Membre confirmé
 
Avatar de iubito
 
Homme
Développeur informatique
Inscription : janvier 2003
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 376
Points : 244
Points : 244
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
__________________
Compatibilité CSS | Hacks CSS IE | IE7

Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h56.


 
 
 
 
Partenaires

Hébergement Web