MySQL sous requete

Résolu
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. 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)
    1. 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
      1. 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
        1. 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
          1. 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 ))