Rechercher : dans
Par :

MySQL sous requete

Dernière réponse le 10 nov 2009 à 09:33:25 koala., le 9 nov 2009 à 10:00:12 
 Signaler ce message aux modérateurs

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.

1

koala., le 9 nov 2009 à 10:37:12

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)

Répondre à koala.

2

Christounet, le 9 nov 2009 à 11:53:02

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 On se donne des souvenirs quand on se quitte.
(Marcel Achard)

Répondre à Christounet

3

koala., le 9 nov 2009 à 13:34:29

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

Répondre à koala.

4

Christounet, le 9 nov 2009 à 17:12:28

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 On se donne des souvenirs quand on se quitte.
(Marcel Achard)

Répondre à Christounet

5

 koala., le 10 nov 2009 à 09:33:25

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 ))

Répondre à koala.