MySQL sous requete

Résolu
koala. Messages postés 294 Statut Membre -  
koala. Messages postés 294 Statut Membre -
Bonjour,

J'ai trois table dans une requête mais deux me pose problème

t1
id
1 - -
2 - -
3 - -

t2
id
1 12/05/2008
1 05/06/2007
1 12/11/2009
2 04/12/2008
2 06/11/2006

Je voudrai que la requête retourne pour chaque id la date la plus récente :
1 12/11/2009
2 04/12/2008

Merci de votre aide.

5 réponses

  1. koala. Messages postés 294 Statut Membre 38
     
    Voilà, ce que j'ai fait mais qui ne fonctionne pas :

    SELECT *
    FROM t3
    LEFT JOIN t1 (t1.champ_quelconque = t2.champ_quelconque AND t1.champ_quelconque_autre=3 AND t1.champ_quelconque_autre=6)
    WHERE t1.id=(
    SELECT id,champ, MAX(date)
    FROM `t2`
    WHERE t2.id= D.id)
    0
  2. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    Le code suivant devrait te donner le résultat recherché pour les deux tables t1 et t2
    SELECT distinct id from t1 ,
    (select max(date) from t2 where t2.id = t1.id)

    Il ne te reste plus qu'a faire la jointure avec t3.
    Juste encore deux petites remarques dans ton code
    - la jointure entre t3 et t1 devrait être du genre t3.champ_quelconque = t1.champ_quelconque et non t2
    - comment le t1.champ_quelconque_autre peut-il être égal à 3 et à 6 en même temps, tu veux peut-être sélectionné les enregistrements ayant ce champ égal à 3 OU à 6, alors remplace ton AND par OR.
    A plus
    0
  3. koala. Messages postés 294 Statut Membre 38
     
    Finalement, j'avais trouvé
    SELECT *
    FROM t3
    LEFT JOIN t1 (t1.champ_quelconque = t2.champ_quelconque AND t1.champ_quelconque_autre=3 AND t1.champ_quelconque_autre=6)
    LEFT JOIN t2 (t1.champ_quelconque = t2.champ_quelconque)
    WHERE t1.id=(MAX(date)
    FROM `t2`
    WHERE t2.id= D.id)
    maintenant nom souci c'est que j'ai des ligne nul avec ma requête simple et je voudrai quelles apparaissent aussi avec la sous-requête
    0
  4. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour koala,

    Je ne comprends pas ton ordre sql, tu ne sélectionnes que des données de t3 , aucune de t1 ou t2. Peut-tu m'indiquer les colonnes de t3, quelques exemples de données de t3 et le résultat que tu souhaites obtenir, cela sera alors peut-être un peu plus clair pour moi.

    A plus
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. koala. Messages postés 294 Statut Membre 38
     
    Finalement, j'avais réussi à faire ce que je voulais :

    SELECT DISTINCT (t1.ID), t1.champ1 , t3.ID, t3.champ2 , t2.DATE, t2.champ3
    FROM `t3`
    LEFT JOIN t1 ON ( t1.IDr = t3.IDr
    AND t1.ID =6
    AND t1.ID2=5 )
    LEFT JOIN t2 ON (t3.id4 = t2.id4 AND
    t2.DATE = (SELECT MAX( DATE ) FROM t2 WHEREt3.id4 = t2.id4 ))
    0