MySQL sous requete

Résolu/Fermé
koala. Messages postés 279 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 6 mai 2011 - 9 nov. 2009 à 10:00
koala. Messages postés 279 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 6 mai 2011 - 10 nov. 2009 à 09:33
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

koala. Messages postés 279 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 6 mai 2011 38
9 nov. 2009 à 10:37
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
9 nov. 2009 à 11:53
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
koala. Messages postés 279 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 6 mai 2011 38
9 nov. 2009 à 13:34
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
9 nov. 2009 à 17:12
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
koala. Messages postés 279 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 6 mai 2011 38
10 nov. 2009 à 09:33
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