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

DB2 Discussion :

Récupération date max entre 2 tables


Sujet :

DB2

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Septembre 2019
    Messages : 17
    Points : 23
    Points
    23
    Par défaut Récupération date max entre 2 tables
    Bonsoir

    SVP je veux récupérer la date la plus récente en SQL DB2 entre 2 tables :


    Table 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MLE     NOM   PRENOM 
    001      XXX    BBBB

    Table 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MLE     NOM      DATE 
    001     XXX   2000-05-12
    001     XXX   2020-12-31

    Résultat :

    comment faire la jointure SVP ?

    merci d'avance

  2. #2
    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 778
    Points
    30 778
    Par défaut
    Il faut déjà savoir sur quelles colonnes doit être effectuée la jointure... MLE, NOM ou les deux ?

    Quant à la manière de le faire, c'est très bien expliqué dans ce tutoriel : LE SQL de A à Z : 3e partie - les jointures.

    Si nécesaire, les fonctions de groupage, qui permettent entre autres de calculer la valeur maximale d'une expression, sont expliquées ici : LE SQL de A à Z : 4e partie - groupage et ensembles
    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.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Septembre 2019
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Bonsoir

    Merci pour votre retour, il y’a une seule clé entre les 2 tables : MLE

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 384
    Points
    38 384
    Billets dans le blog
    9
    Par défaut
    pour votre besoin, la table 2 suffit, donc pas besoin de jointure.

    La requête suivante vous donnera le résultat attendu :

    select MLE, NOM, max(MADATE) from MATABLE2 group by MLE, NOM.

    A noter :
    - la présence de la même colonne "nom" dans table1 et table2 est une redondance et donc une erreur de modélisation, à corriger ou faire corriger dans la mesure du possible
    - le nom "date" est un mot réservé, à éviter pour nommer les objets bases de données (tables, colonnes, vues etc.), car ça complique inutilement les requêtes

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Septembre 2019
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Merci pour votre réponse , j’ai besoin de jointure , car j’ai 1er curseur qui permet de récupérer toutes les matricule de la 1er tables , et de chercher dans la 2eme table le montant avec date récente : exemple :

    Table1
    Mle. Nom. Adresse
    001. Xxx. Yyyyyyy
    002. Ttttt. Eeeeee

    Table 2
    Mle Date. Montant
    001. 2000-01-03 300
    001. 2020-01-30. 400
    002. 2030-12-20. 800

    Résultat attendu pour mle trouver par exemple 001.
    Mle. Date Montant
    001. 2020-01-30. 400


    Merci d’avance

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 384
    Points
    38 384
    Billets dans le blog
    9
    Par défaut
    Dans votre question initiale, table2 comportait toutes les colonnes requises pour le résultat de votre requête à savoir MLE, NOM et DATE.
    Dans votre dernière réponse, table2 ne comporte plus la colonne NOM mais possède désormais une colonne MONTANT

    Ma réponse était donc adaptée à la description fournie dans votre 1er message.

    Dans votre nouvelle description, le résultat attendu change puisque vous n'avez plus besoin du nom, mais il faut ajouter le montant
    Mais la encore, vu que la table2 dans sa nouvelle description correspond parfaitement au résultat attendu, toujours pas besoin de jointure...

    Enfin, il n'y a aucun intérêt à faire un curseur sur la table1 pour récupérer les matricules, puisque vous avez également, a priori en tout cas et sauf explication contraire, tous les matricules dans table2.

    Voici un exemple de résultat, proche de celui attendu dans votre dernière réponse, dans lequel j'ai ajouté la restitution du nom et du prénom afin de justifier la jointure (sinon, encore une fois, aucun intérêt de faire cette jointure). J'en ai également profité pour remplacer le nom réservé "date" par "xdate"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select t1.MLE
         , t1.nom
         , t1.prenom
         , t2.xdate    
         , t2.mont
    from table1 T1
    inner join table2 T2
       on t2.mle=t1.mle
      and t2.xdate=
         (select max(subq.xdate)
          from table2 subq
          where subq.mle=t2.mle)   
    order by t1.mle
    Par exemple, avec ce jeu d'essais
    Table1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        001, 'XXX   ', 'BBB    ' 
        005, 'Martin', 'Paul   ' 
        022, 'Dupont', 'Jacques'
        002, 'Dupuis', 'Gisèle '
    Table2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          001, '2000-01-03', 300     
          001, '2020-01-30', 400     
          002, '2030-12-20', 800     
          005, '2018-11-16', 330     
          022, '2019-07-15', 600     
          022, '2014-08-28', 531     
          005, '2019-02-20', 700     
          005, '2021-03-03', 600
    On obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MLE          NOM     PRENOM   XDATE       MONT         
    -------------------------------------------------------
    1            XXX     BBB      2020-01-30  400          
    2            Dupuis  Gisèle   2030-12-20  800          
    5            Martin  Paul     2021-03-03  600          
    22           Dupont  Jacques  2019-07-15  600

  7. #7
    Membre à l'essai
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Septembre 2019
    Messages : 17
    Points : 23
    Points
    23
    Par défaut
    Bonjour

    c'est résolu , Merci escartefigue

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

Discussions similaires

  1. comment trouver les dates max en multi-tables ?
    Par S.H dans le forum Bases de données
    Réponses: 5
    Dernier message: 31/07/2015, 09h00
  2. Sélectionner la date max entre deux requêtes
    Par ibox53 dans le forum Access
    Réponses: 3
    Dernier message: 30/06/2015, 11h25
  3. [MAX] - entre 2 tables
    Par EFFLYINGJOKER dans le forum SQL
    Réponses: 6
    Dernier message: 26/09/2011, 17h11
  4. [MySQL] mise à jour et récupération de date d'une entrée de table modifiée
    Par pp_le_moko dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/12/2009, 12h02
  5. max entre 2 tables
    Par toitoine01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/01/2006, 10h49

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