IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Récupérer la 1e ligne ou celles > à une date


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Points : 655
    Points
    655
    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
    Membre éclairé, lol !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Donne la structure exacte de tes tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    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...
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Hmm, effectivement, moi j'étais parti du principe qu'il allait devoir afficher les salaires mensuels des employés
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Points : 655
    Points
    655
    Par défaut
    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
    Membre éclairé, lol !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Récupérer jour, mois et année à partir d'une date
    Par adamsmith dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/08/2009, 17h11
  2. Récupérer le numéro de la semaine sur une date
    Par bagbones dans le forum SQL
    Réponses: 11
    Dernier message: 30/07/2008, 14h18
  3. Récupérer le nom du mois à partir d'une date.
    Par zooffy dans le forum ASP.NET
    Réponses: 10
    Dernier message: 04/03/2008, 14h48
  4. Recherche une ligne en fonction d'une date
    Par c+cool dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/09/2006, 15h30
  5. Récupérer le mois et l'année d'une date
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo