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

SQL Oracle Discussion :

Recherche du dernier emploi


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Par défaut Recherche du dernier emploi
    Bonjour a tous.

    J'ai une table TAGENT qui regroupe tous mes agents.
    Une deuxieme TEMPLOI qui regroupe tous les emplois de mes agents.
    Un agent peut avoir plusieurs emplois.
    TAGENT
    IDAGENT;NOM;PRENOM...
    TEMPLOI
    IDEMPLOI;IDAGENT;DATEDEBUT;DATEFIN...
    Je voudrais une requete qui m'affiche l'ID AGENT, ID EMPLOI, DATEDEBUT du dernier emploi et DATEFIN du dernier emploi a partir du 01/01/2016
    J'essaye cette requete mais elle me resort tous les emploi depuis le 01/01/2016 alors que je veux juste afficher le dernier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT tagent.idagent,temploi.idemploi,MAX(TO_CHAR((temploi.datefin),'DD/MM/YYYY'))
    from tagent,temploi 
    where tagent.idagent=temploi.idagent 
    AND 
    (temploi.datefin is NULL OR (TO_CHAR(TEMPLOI.DATEFIN,'DD/MM/YYYY')>to_date('01/01/2016','DD/MM/YYYY')AND MAX(TO_CHAR(TEMPLOI.DATEFIN,'DD/MM/YYYY'))) 
    ORDER BY tagent.idagent GROUP BY tagent.idagent,temploi.idagent ;
    Je ne m'en sors pas

    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    La recherche du dernier, du plus grand, du plus ancien... ressort régulièrement sur ce forum, avec toujours les mêmes réponses.
    Une petite recherche devrait te donner des pistes.

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Par défaut
    Effectivement j'ai vu plusieurs exemple.

    Mon problème avec mes différents essais, c'est que la date de fin n'est pas forcement remplie (quand l'agent a un emploi en court par exemple).
    Ce que je ne vois pas comment faire, c'est lui dire la plus grande date de fin ou la vide car je n'arrive pas a mettre la fonction MAX dans le WHERE...

    Je ne sais pas si je suis clair...

    Merci d'avoir répondu

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select trim(temploi.idagent)||';'||MAX(TO_CHAR(temploi.datefin,'DD/MM/YYYY')) from temploi,tagent where temploi.idagent=tagent.idagent GROUP BY temploi.idagent ORDER BY temploi.idagent ASC;
    J'ai essayé cette requête.
    Elle fonctionne correctement pour les personnes qui n'ont plus d'emploi ouvert, mais pour les personnes qui ont une date de fin vide et qui on eu un emploi précédent cela ne fonctionne pas (sa ressort la dernière date de fin à la place d'une date vide...)

    En faite je voudrais faire.

    récupérer tous les emplois pour un IDAGENT depuis la table emploi.
    Si dans les valeurs récupérées il y a une date de fin vide alors un emploi et ouvert on récupère cet ligne
    Si dans les valeurs récupérées il y a pas de date de fin vide alors pas d'emploi ouvert on récupère la ligne avec la date de fin la plus récente.

    Merci de l’intérêt que vous portez a mon problème... en espérant avoir été clair.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Vous pouvez utiliser une fonction analytique avec la précisions NULLS FIRST/LAST dans la clause order by :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      with emploi_rang as (
    SELECT a.idagent
         , e.idemploi
         , e.datedebut
         , rank () over(partition by a.idagent order by e.datefin desc NULLS first) as rk
      from tagent a
      join temploi e on e.idagent = a.idagent
     where e.datefin >= to_date('01/01/2016','dd/mm/yyyy') or e.datefin is null
    )
    select *
      from emploi_rang
     where rk = 1

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Par défaut
    Merci beaucoup pour ce code et le lien.
    J'essaye d'adapter ton code a mon veritable probleme à savoir

    Tagent -> Tagentemploi -> tagentcontrathistorique qui reprend les contrats le but étant d'avoir un CSV avec
    idagent datedebutemploi et datefincontrat(qui se trouve dans la table historique.

    Je pensais faire une sous requete mais j'ai un pb avec le rank je te met mon code si tu 5 minutes pour y jeter un œil

    Encore merci
    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
     with emploi_rang as (
    SELECT 
    	   trim(a.idagent)||';'||
           trim(e.idagentemploi)||';'||
           trim(h.datedebut)||';'||
    	   trim(h.datefin),
           rank () over(partition by e.idagentemploi order by h.datefin desc NULLS first) as rk
      from tagent a
      join tagentemploi e on e.idagent = a.idagent
      join tagentcontrathistorique h on e.idagentemploi = h.idagentemploi
     where (h.datefin >= to_date('01/01/2016','dd/mm/yyyy') or h.datefin is null) AND h.idagentemploi=(
     SELECT
     e.idagentemploi
     rank () over(partition by e.idagentemploi order by h.datefin desc NULLS first)
     from tagent a
      join tagentemploi e on e.idagent = a.idagent
     where e.datefin >= to_date('01/01/2016','dd/mm/yyyy') or e.datefin is null
     )
    )
    select *
      from emploi_rang
     where rk = 1;

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

Discussions similaires

  1. Recherche du dernier caractere d'une chaine
    Par Bundy*Al dans le forum C++
    Réponses: 9
    Dernier message: 30/06/2007, 13h10
  2. Réponses: 2
    Dernier message: 16/12/2006, 12h34
  3. Réponses: 3
    Dernier message: 23/02/2006, 23h01
  4. Formulaire de recherche prêt à l'emploi (nouvelle version)
    Par Darlay Jean_Louis dans le forum IHM
    Réponses: 2
    Dernier message: 24/11/2005, 11h29
  5. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 09h13

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