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 :

Problème avec MAX


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Problème avec MAX
    Bonjour à tous,
    je tente une requête en apparence simple mais qui me tient en échec:
    je dispose de 2 tables, SALARIE et CONTRAT, reliées par une jointure sur un IDALARIE, un salarié pouvant disposé de plusieurs contrats.

    SALARIE
    NOM | PRENOM | IDSALARIE

    CONTRAT
    IDCONTRAT | IDSALARIE | DATE_DEBUT | DATE_FIN

    je voudrais tout simplement obtenir NOM, PRENOM, IDSALARIE, DATE_FIN du dernier contrat de chaque salarié (dernier contrat = DATE_DEBUT la plus élevée: MAX(DATE_DEBUT))
    le problème étant que je veux DATE_FIN qui ne peut bien évidemment pas figuré dans le GROUP BY que m'imposerait l'utilisation de la clause MAX

    Merci d'avance.

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

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Bonjour,
    Il y plusieurs solutions pour ce genre de problème: sous-requête corrélée, jointure...
    J'ai pour habitude de passer par une jointure:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select c1.IDCONTRAT,c1.IDSALARIE,c1.DATE_DEBUT,c1.DATE_FIN
    from SALARIE
    inner join contrat as c1 on c1.idsalarie = salarie.idsalarie
    left outer join contrat as c2 on c2.idsalarie = c1.idsalarie and c2.idcontrat <> c1.idcontrat and c2.date_debut > c1.date_debut
    where c2.idcontrat is null

    L'idée est que le dernier contrat est celui pour lequel il n'en existe pas avec une date supérieure.

    Tatayo.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Génial, ça marche, merci beaucoup

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

Discussions similaires

  1. Problème avec "MAX"
    Par guivrator dans le forum Requêtes
    Réponses: 5
    Dernier message: 16/04/2009, 14h25
  2. Problème avec "MAX" et/ou "TOP"
    Par funkyjul dans le forum Développement
    Réponses: 6
    Dernier message: 18/03/2009, 07h54
  3. problème avec MAX(Date)
    Par ouchemhou dans le forum Langage SQL
    Réponses: 12
    Dernier message: 23/08/2008, 17h13
  4. Problème avec MAX()
    Par Arkay dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/10/2007, 20h01
  5. Problème avec Max.
    Par Tyler Durden dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/10/2006, 08h05

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