Bonjour,
Je vous livre tel quel mon problème :
Voici ma base de données constituée de 3 tables :
TABLE : PRENOM
ID | NOM
--------------------
1 | Paul
2 | Pierre
3 | Patrice
4 | Philippe
TABLE : ACHAT
ID | ADAT | TYPE
-------------------------
1 | 01/05/2005 | MICRO
1 | 25/12/2005 | MOTO
2 | 03/05/2004 | MAISON
2 | 20/04/2005 | AUTO
2 | 26/10/2005 | MOTO
2 | 12/12/2005 | APPART
3 | 30/03/2004 | MICRO
3 | 19/06/2004 | MOTO
3 | 21/01/2005 | AUTO
3 | 16/04/2005 | MAISON
3 | 23/07/2005 | BATEAU
4 | 11/09/2004 | AUTO
TABLE : VOYAGE
ID | VDAT | LOCAL
--------------------------
1 | 21/01/2005 | EUROPE
1 | 23/07/2005 | ASIE
1 | 20/04/2005 | AMERIQUE
2 | 30/03/2004 | AFRIQUE
2 | 11/09/2004 | OCEANIE
3 | 03/05/2004 | ASIE
3 | 01/05/2005 | AFRIQUE
3 | 16/04/2005 | ASIE
4 | 25/12/2005 | ASIE
4 | 19/06/2004 | EUROPE
4 | 26/10/2005 | ASIE
4 | 12/12/2005 | EUROPE
Ma requête SQL :
La réponse de la requête SQL (réponse intermédiaire)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT PRENOM.ID, PRENOM.NOM, ACHAT.ADAT, ACHAT.TYPE, MAX(VOYAGE.VDAT) AS MVDAT, VOYAGE.LOCAL FROM PRENOM LEFT OUTER JOIN ACHAT ON PRENOM.ID = ACHAT.ID LEFT OUTER JOIN VOYAGE ON PRENOM.ID = VOYAGE.ID WHERE (VOYAGE.LOCAL = 'ASIE') OR (ACHAT.TYPE = 'MOTO' OR ACHAT.TYPE = 'MAISON') GROUP BY PRENOM.ID, PRENOM.NOM, ACHAT.ADAT, ACHAT.TYPE, VOYAGE.LOCAL ORDER BY PRENOM.ID
N° | NOM | DATE | TYPE | DATE | LOCAL
-----------------------------------------------------------
01 | Paul | 01/05/2005 | MICRO | 23/07/2005 | ASIE
02 | Paul | 25/12/2005 | MOTO | 20/04/2005 | AMERIQUE
03 | Paul | 25/12/2005 | MOTO | 23/07/2005 | ASIE
04 | Paul | 25/12/2005 | MOTO | 21/01/2005 | EUROPE
05 | Pierre | 03/05/2004 | MAISON | 30/03/2004 | AFRIQUE
06 | Pierre | 03/05/2004 | MAISON | 11/09/2004 | OCEANIE
07 | Pierre | 26/10/2005 | MOTO | 30/03/2004 | AFRIQUE
08 | Pierre | 26/10/2005 | MOTO | 11/09/2004 | OCEANIE
09 | Patrice| 30/03/2004 | MICRO | 16/04/2005 | ASIE
10 | Patrice| 19/06/2004 | MOTO | 01/05/2005 | AFRIQUE
11 | Patrice| 19/06/2004 | MOTO | 16/04/2005 | ASIE
12 | Patrice| 21/01/2005 | AUTO | 16/04/2005 | ASIE
13 | Patrice| 16/04/2005| MAISON | 01/05/2005 | AFRIQUE
14 | Patrice| 16/04/2005| MAISON | 16/04/2005 | ASIE
15 | Patrice| 23/07/2005| BATEAU | 16/04/2005 | ASIE
16 | Philippe| 11/09/2004| AUTO | 25/12/2005 | ASIE
Enfin j'utilise un script ASP pour obtenir cette réponse finale :
N° | NOM | DATE | TYPE | DATE | LOCAL
---------------------------------------------------------
03 | Paul | 25/12/2005 | MOTO | 23/07/2005 | ASIE
05 | Pierre | 03/05/2004 | MAISON | -------- |---------
07 | Pierre | 26/10/2005 | MOTO | --------- |---------
11 | Patrice | 19/06/2004 | MOTO | 03/05/2004 | ASIE
14 | Patrice | 16/04/2005 | MAISON | 03/05/2004 | ASIE
16 | Philippe | ---------- | ------- | 25/12/2005 | ASIE
Cette liste répond à la question
- à quelles dates ont été achetées MOTO et MAISON et
- la dernière date du voyage en ASIE
pour toutes les personnes de ma table PRENOM
Ma question :
Est-il possible d'améliorer ma requête SQL pour qu'elle me retourne directement la réponse finale (je pourrais ainsi me passer du script ASP)
Merci
Partager