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 :

Joindre deux tables avec max sur date


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Joindre deux tables avec max sur date
    Bonjour,

    J'ai deux tables:
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MOUVEMENT (id, id_ville, adate, bdate)
    Je sais lier mes 2 tables par une requête du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT VILLE.nom, MOUVEMENT.adate, MOUVEMENT.bdate
    FROM VILLE, MOUVEMENT
    Toutefois, pour chaque ville, j'obtient toutes les occurences de MOUVEMENT.
    Je voudrais récupérer uniquement dans MOUVEMENT la ligne avec la date max de adate.

    Comment dois-je procéder? J'ai tester plusieurs choses, mais ça ne donne rien.

    Merci d'avance pour votre aide.
    Xavier

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Dans la requête donnée en exemple, il manque la condition de jointure (qu'est-ce qui relie les deux tables ?).
    Sinon pour ta demande, il y a plusieurs façons de faire (not exists, left outer join...).
    Montre-nous ce que tu as tenté de faire, ainsi on pourra te dire où tu t'es trompé.

    Tatayo.

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Voilà ce que j'ai testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT 
    a.id, a.nom, 
    b.no, b.adate, b.bdate,
    VILLE as a, MOUVEMENT as b
    WHERE
    a.id = b.no
    and b.adate IN (SELECT MAX(c.adate) FROM MOUVEMENT as c WHERE b.adate= c.adate group by c.no)
    GROUP BY a.id
    Xavier

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je vois déjà plusieurs problèmes:
    1. Il manque le FROM dans la requête, mais je pens equ'il s'agit d'un soucis de copier/coller
    2. Tu regroupes le résultat sur a.id, mais je ne vois aucune fonction d'aggrégation (max,min,sum...). A quoi sert le group-by ?
    3. Les jointures s'écrivent avec JOIN...
    4. Les colonnes indiquées dans la requête ne correspondent pas avec la description du premier message (mouvement.no par exemple)
    5. D'après ce que je comprends du premier message, j'aurai plutôt fait la jointure sur ville.id et mouvement.id_ville
    6. J'ai un gros doute avec la sous-requête, surtout b.adate= c.adate

    De mon côté j'aurai plutôt utilisé un NOT-EXISTS (voir une jointure externe), en postulant que la date max est celle pour laquelle il n'existe pas de date supérieure.

    Tatayo.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tu n'es pas loin du résultat, il suffit juste d’utiliser la bonne colonne pour faire la sélection dans la sous-requête :
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Tu n'es pas loin du résultat, il suffit juste d’utiliser la bonne colonne pour faire la sélection dans la sous-requête :
    Merci, ça marche.

    Merci à tout les 2.

    A bientôt
    Xavier

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

Discussions similaires

  1. [MySQL] requête sur 2 tables avec filtre sur date
    Par pp_le_moko dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/02/2010, 14h13
  2. Réponses: 1
    Dernier message: 16/09/2009, 13h30
  3. Réponses: 10
    Dernier message: 11/08/2009, 14h43
  4. requete sur deux tables avec join et coalesce
    Par nifufu dans le forum Requêtes
    Réponses: 14
    Dernier message: 10/02/2009, 13h51
  5. Requetes sur deux tables avec plusieurs retour
    Par IP-Fix dans le forum Requêtes
    Réponses: 16
    Dernier message: 13/11/2008, 18h46

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