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
    Futur Membre du Club
    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 :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    001     XXX   2020-12-31



    comment faire la jointure SVP ?

    merci d'avance

  2. #2
    Modérateur

    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
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Futur Membre du Club
    Bonsoir

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

  4. #4
    Expert éminent sénior
    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
    Futur Membre du Club
    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
    Expert éminent sénior
    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
    Futur Membre du Club
    Bonjour

    c'est résolu , Merci escartefigue

###raw>template_hook.ano_emploi###