Pb jointure externes

Résolu
astondb9 Messages postés 4 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 7 février 2008 - 7 févr. 2008 à 10:10
astondb9 Messages postés 4 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 7 février 2008 - 7 févr. 2008 à 13:58
Bonjour,

J'ai problème avec une requête  SQL en jointure.
2 tables :
1ere table : id(cléprimaire) / description/ statut 
2ème table : id /date de l'action/ action

exemple :
1ere table:    1 / incident concernant le routage / ouvert
             2 / incident connection / ouvert
            3 / retard livraison  / clos

2eme table :   1 / 01/01/2008 10:00/ contact
             1 / 01/01/2008 12:00/ relance
             2 / 02/01/2008  08:00/ contact
             3 / 12/12/2007  09:00/ mail 

je voudrais récuperer l'ensemble des données de la premiere table dont le statut est ouvert et les données les plus récentes de la deuxième table pour chaque enregistrement de la 1ere table

je lance ma requète :
SELECT table1* , table2.action FROM  table1 LEFT OUTER JOIN  table2 ON table1.idtable2.id AND date de l'action(Select MAX(date de l'action) From table2)
WHERE Table1.Statut ='Ouvert'

cette requete  remonte bien l'ensemble de la table 1( excepter l'id3) mais uniquement l'action "2 / 02/01/2008  08:00/ contact" de ladeuxième table et pas l'action " 1 / 01/01/2008 12:00/ relance"

Quelqu'un a t il une idée pour recuperer ces données ?

merci
Astondb9

9 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
7 févr. 2008 à 11:57
Salut,
c 'est normal ! puisque tu fais un regroupement dans la table2 et que tu ne prend que la date maximale 02/01/2008 , qui correspond au 2.
Essaies :
SELECT table1* , table2.action FROM  table1 LEFT OUTER JOIN  table2 ON table1.idtable2.id <strike>AND date de l'action(Select MAX(date de l'action) From table2)
</strike>WHERE Table1.Statut ='Ouvert'
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
3
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
7 févr. 2008 à 12:03
salut (re) => Post Croisé avec Max (Salut !)

A toi de choisir la soluce qui te convient le mieux.

Pat

 Don't Worry , Be Happy


<hr />lorsque le problème est résolu, pensez Réponse Acceptée
3
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
7 févr. 2008 à 13:26
Autant pour moi !
je viens de relire et je m' aperçois de mon erreur

et les données les plus récentes de la deuxième table
encore une fois désolé. <hr />
... Il y' en a même qui m' ont vu voler.
<hr />
3
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
7 févr. 2008 à 12:01
salut,
ton pb vient de la clause " date de l'action =(Select MAX(date de l'action) From table2) "
tu récupères toutes les données dont la date est églae à max(date action)
dans ton cas, Max(date action) = 02/01/2008
ce qui revient a écrire And Date de l'action = '02/01/2008'
tu n'as qu'un enreg qui correspond à ce critère.
pour n'avoir que l'élément le plus récent de chaque élément de table 1, j'essaierais ceci


SELECT table1.* ,


(Select Top 1 DateAction FROM  Table2 Where Table1.ID = Table2.ID Order By DateAction Desc) as DateAction,


(Select Top 1 Action FROM  Table2 Where Table1.ID = Table2.ID Order By DateAction Desc) as
Action


From Table1

WHERE Table1.Statut ='Ouvert'

Sur ce

@+






Pat

 Don't Worry , Be Happy





<hr />
lorsque le problème est résolu, pensez Réponse Acceptée
0

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

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
7 févr. 2008 à 12:14
Salut pneau

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
0
astondb9 Messages postés 4 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 7 février 2008
7 févr. 2008 à 13:01
Ok c'est super.
Je ne pensais pas que l'on pouvait inclure un select directement dans le premier select
 d'une requete

Merci encore
Astondb9
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
7 févr. 2008 à 13:22
Excuses moi mais tu veux toutes les occurences de tables2 dont
le statut est ouvert
1 / 01/01/2008 10:00/ contact
1 / 01/01/2008 12:00/ relance
2 / 02/01/2008  08:00/ contact


ou tu ne veux qu' une ?


Si tu les veux toutes, pas la peine d' imbriquer un 2 ième select.

SELECT table1* , table2.action
FROM  table1 LEFT OUTER JOIN  table2 ON table1.id= table2.id
WHERE Table1.Statut ='Ouvert'


suffira.
                 
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
0
astondb9 Messages postés 4 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 7 février 2008
7 févr. 2008 à 13:56
Astondb9
0
astondb9 Messages postés 4 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 7 février 2008
7 févr. 2008 à 13:58
Pas de probléme je n'étais pas sur que ce soit très compréhensible

Astondb9
0
Rejoignez-nous