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

Requêtes MySQL Discussion :

Requete recupere les données de la ID le plus par utilisateur


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    818
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 818
    Points : 49
    Points
    49
    Par défaut Requete recupere les données de la ID le plus par utilisateur
    Bonjour à tous,


    J'ai une requête qui récupère les informations des mes salariées, dans la table en question j'ai plusieurs ligne pour un salarié.

    Il y a plusieurs ligne car la personne peut avoir évoluée (changement de poste /hausse du salaraire etc..)

    Voici ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    SELECT DISTINCT concessions.nom as nomconcessions, 
    rhp2.nom as nom, rhp2.prenom as prenom,
    rhpn.nom_nationalite as nationalite,
    rhp2.adresse as adresse,
    rhp2.cp as cp,
    rhp2.ville as ville, 
    DATE_FORMAT(date_entree,'%d/%m/%Y')as`date_entree`, 
    DATE_FORMAT(date_sortie,'%d/%m/%Y')as`date_sortie`,
    DATE_FORMAT(date_naissance,'%d/%m/%Y')as`date`,`sexe`,
    (Select min(date_debut) 
    FROM `rh_personnel_suivi` rhps
    INNER JOIN rh_personnel rhp ON rhp.id_rhp = rhps.id_rhp 
    WHERE
    rhp.id_rhp=rhp2.id_rhp
     
    ) as tttt,(Select max(if(date_fin='0000-00-00','2099-12-31',date_fin))
    FROM `rh_personnel_suivi` rhps
    INNER JOIN rh_personnel rhp ON rhp.id_rhp = rhps.id_rhp 
    WHERE
    rhp.id_rhp=rhp2.id_rhp)
     as tttt2,  
    nom_emploi as emploi,   
    CONCAT(nom_classification,'-', nom_echelon) as classification,   
    nom_contrat as type,   
    date_vm, 
    rhps.id_concessions
    FROM `rh_personnel_suivi` rhps
    INNER JOIN concessions on concessions.id_concessions=rhps.id_concessions
    INNER JOIN rh_personnel rhp2 ON rhp2.id_rhp = rhps.id_rhp
    INNER JOIN rh_personnel_nationalite rhpn ON rhpn.id_rhpn=rhp2.id_rhpn
    INNER JOIN rh_personnel_classification rhpc ON rhpc.id_rhpc = rhps.id_rhpc
    INNER JOIN rh_personnel_echelon rhpe ON rhpe.id_rhpe = rhps.id_rhpe
    INNER JOIN rh_personnel_type_suivi rhpts ON rhpts.id_rhpts = rhps.id_suivi
    INNER JOIN rh_personnel_type_emploi rhpte ON rhpte.id_rhpte = rhps.id_rhpte
    INNER JOIN rh_personnel_type_contrat_travail rhptct ON rhptct.id_rhptct = rhps.id_rhptct
    WHERE rhps.id_concessions IN ('1')
    ORDER BY concessions.nom, rhp2.nom, rhps.id_rhps
    Mais comment faire pour qu'il me ressort uniquement le dernier ligne (enregistrement) par salarié. En champs j'ai un ID_unique de rh_personnel_suivi ou bien la date (date_debut) qui est forcement plus grande que la précédent.

    Est-ce que sais possible ou pas ?

    Merci d'avance pour vos explications

    guigui69

  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 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Quelle horreur, cette requête !

    1) Des sous-requêtes SELECT dans la partie SELECT de la requête principale, ça donne rarement de bons résultats en terme de performance.

    2) Inutile d'utiliser IN lorsqu'il y a une seule valeur à tester.

    Revenons à votre problème...

    comment faire pour qu'il me ressort uniquement le dernier ligne (enregistrement) par salarié. En champs j'ai un ID_unique de rh_personnel_suivi ou bien la date (date_debut) qui est forcement plus grande que la précédent.
    Commençons par chercher ces lignes, en supposant que l'id unique de la table de suivi soit id_rhps, parce que vous ne donnez pas la structure de vos tables et ce n'est pas évident de la deviner...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_rhp, MAX(id_rhps) AD id_max
    FROM rh_personnel_suivi
    GROUP BY id_rhp
    Récupérons les colonnes souhaitées de cette table pour cette ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT s.les_colonnes_souhaitees
    FROM rh_personnel_suivi s
    INNER JOIN
    (
        SELECT id_rhp, MAX(id_rhps) AD id_max
        FROM rh_personnel_suivi
        GROUP BY id_rhp
    ) tmp
        ON tmp.id_max = s.id_rhps
    À partir de là, vous pouvez faire les jointures avec les autres tables pour récupérer les autres informations.
    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
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    818
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 818
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    désolé de n'a pas avoir fait de retour sur mon topic j'ai pas avancée sur ma requête.

    Il oublié une donnée:

    Comme indiqué les salariés dispose dans la table de plusieurs ligne du au changement de poste.

    Exemple:

    Salarié | date début| date fin| Poste|Societe
    Frédéric|01/01/1973|01/01/1990|Magasinier|astra|
    Frédéric|02/01/1990|31/07/1995|Magasinier superieur|astra|
    Frédéric|01/08/1995|31/12/2000|Adjoint magasin|astra|
    Frédéric|01/01/2001|00/00/0000|Resp.Magasinier|astra|


    Et je voudrais pouvoir sortir la liste des salariés présent dans la société astra mais que cela me ressorte uniquement une ligne par salarié date début et date fin
    exemple :

    Salarié | date début| date fin| Poste|Societe
    Frédéric|01/01/1973|00/00/0000|Resp.magasinier|Astra|

    Est-ce réalisable?

    Si quelqu'un peut m'aiguiller

    Merci d'avance pour votre aide

    guigui69

Discussions similaires

  1. Recuperer les données d'une requete dans UNE variable
    Par Devilju69 dans le forum Langage
    Réponses: 5
    Dernier message: 05/01/2014, 00h52
  2. Réponses: 1
    Dernier message: 20/02/2008, 11h34
  3. Creer une requete update qui recupere les données de 2 tables
    Par pooi1 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/06/2007, 13h13
  4. [Debutant]recupere les données d'un requete dans le form
    Par [thebadskull] dans le forum Access
    Réponses: 1
    Dernier message: 04/05/2006, 10h53
  5. Mysql LongBlob: recuperer les données
    Par froz dans le forum SGBD
    Réponses: 1
    Dernier message: 24/08/2005, 14h41

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