Bonjour à tous
Je sais que c'est un sujet récurent qui pose beaucoup de problèmes aux débutants en SQL tels que moi, mais j'ai 2 requêtes plutôt basiques (mais longues) qui fonctionnent très bien indépendamment, mais je n'arrive pas du tout à faire l'INNER JOIN entre les 2.
Ma table contient des interventions pour réaliser une certaine opération (qui a une référence_SP). Pour une opération (une référence_SP quoi), on peut avoir plusieurs interventions
La première requête extrait des interventions, et plein d'autres infos dont la date de création de cette intervention.
Pas besoin de vous attarder sur la requête en elle-même, elle fonctionne bien, pas de problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 SELECT ODEON_INTERVENTIONS.INTERVENTIONID, ODEON_INTERVENTIONS.REFERENCE_SP, ODEON_INTERVENTIONS.ReferenceProjet, ODEON_INTERVENTIONS.INTERVENTIONDATECREATION, ODEON_INTERVENTIONS.INTERVENTIONETAT, ODEON_INTERVENTIONS.INTERVENTIONETATTECHNIQUE, ODEON_INTERVENTIONS.INTERVENTIONCARACTERISTIQUES FROM ODEON_GDIUSER, ODEON_INTERVENTIONS, ODEON_GDIGROUP WHERE ( ODEON_GDIGROUP.GROUP_NAME=ODEON_GDIUSER.GROUPEFONCTIONNEL ) AND ( ODEON_INTERVENTIONS.GROUPEINTERVENANT LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_INTERVENTIONS.GROUPEPRESTATAIRE LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_GDIUSER.TYPE='Interne' ) AND ( ODEON_GDIUSER.LOGIN_NAME=@Variable('BOUSER') ) AND ( ODEON_INTERVENTIONS.INTERVENTIONDATECREATION > '08-07-2019 00:00:00' AND ODEON_INTERVENTIONS.DEMANDEURENTITE = 'TIBCO' AND ODEON_INTERVENTIONS.InterventionFamille = 'TRANS_BB' AND ODEON_INTERVENTIONS.REFERENCE_SP LIKE 'A%' )
Ma seconde requête extrait de la même table la même chose, sauf qu'elle extrait uniquement l'intervention la plus récente pour chaque opération (référence_SP).
Encore une fois, pas besoin de s'attarder sur la requête en elle-même : elle fonctionne bien et me donne ce que j'attends
Le problème est pour faire l'INNER JOIN entre ces 2 requêtes, je m'en trouve bien incapable, pourtant j'en ai déjà fait beaucoup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 SELECT ODEON_INTERVENTIONS.REFERENCE_SP, MAX(ODEON_INTERVENTIONS.INTERVENTIONDATECREATION) AS maxDate FROM ODEON_INTERVENTIONS, ODEON_GDIUSER, ODEON_GDIGROUP WHERE ( ODEON_GDIGROUP.GROUP_NAME=ODEON_GDIUSER.GROUPEFONCTIONNEL ) AND ( ODEON_INTERVENTIONS.GROUPEINTERVENANT LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_INTERVENTIONS.GROUPEPRESTATAIRE LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_GDIUSER.TYPE='Interne' ) AND ( ODEON_GDIUSER.LOGIN_NAME=@Variable('BOUSER') ) AND ( ODEON_INTERVENTIONS.INTERVENTIONDATECREATION >= '08-07-2019 00:00:00' AND ODEON_INTERVENTIONS.REFERENCE_SP LIKE 'A%' AND ODEON_INTERVENTIONS.DEMANDEURENTITE IN ( 'TIBCO' ) AND ODEON_INTERVENTIONS.InterventionFamille IN ( 'TRANS_BB' ) ) GROUP BY ODEON_INTERVENTIONS.REFERENCE_SP
Je veux faire la jointure sur la date de création et la réf de l'opération (la première requête prenant toutes les interventions, la seconde ne prenant que la plus récente pour chaque opération)
J'ai essayé comme ça :
Mais je me mange l'erreur ORA-00933: SQL command not properly ended.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 SELECT ODEON_INTERVENTIONS.INTERVENTIONID, ODEON_INTERVENTIONS.REFERENCE_SP, ODEON_INTERVENTIONS.ReferenceProjet, ODEON_INTERVENTIONS.INTERVENTIONDATECREATION, ODEON_INTERVENTIONS.INTERVENTIONETAT, ODEON_INTERVENTIONS.INTERVENTIONETATTECHNIQUE, ODEON_INTERVENTIONS.INTERVENTIONCARACTERISTIQUES FROM ODEON_GDIUSER, ODEON_INTERVENTIONS, ODEON_GDIGROUP WHERE ( ODEON_GDIGROUP.GROUP_NAME=ODEON_GDIUSER.GROUPEFONCTIONNEL ) AND ( ODEON_INTERVENTIONS.GROUPEINTERVENANT LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_INTERVENTIONS.GROUPEPRESTATAIRE LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_GDIUSER.TYPE='Interne' ) AND ( ODEON_GDIUSER.LOGIN_NAME=@Variable('BOUSER') ) AND ( ODEON_INTERVENTIONS.INTERVENTIONDATECREATION > '08-07-2019 00:00:00' AND ODEON_INTERVENTIONS.DEMANDEURENTITE = 'TIBCO' AND ODEON_INTERVENTIONS.InterventionFamille = 'TRANS_BB' AND ODEON_INTERVENTIONS.REFERENCE_SP LIKE 'A%' ) INNER JOIN (SELECT ODEON_INTERVENTIONS.REFERENCE_SP, MAX(ODEON_INTERVENTIONS.INTERVENTIONDATECREATION) AS maxDate FROM ODEON_INTERVENTIONS, ODEON_GDIUSER, ODEON_GDIGROUP WHERE ( ODEON_GDIGROUP.GROUP_NAME=ODEON_GDIUSER.GROUPEFONCTIONNEL ) AND ( ODEON_INTERVENTIONS.GROUPEINTERVENANT LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_INTERVENTIONS.GROUPEPRESTATAIRE LIKE '%;'||ODEON_GDIGROUP.GROUPID||';%' OR ODEON_GDIUSER.TYPE='Interne' ) AND ( ODEON_GDIUSER.LOGIN_NAME=@Variable('BOUSER') ) AND ODEON_INTERVENTIONS.INTERVENTIONDATECREATION >= '08-07-2019 00:00:00' GROUP BY ODEON_INTERVENTIONS.REFERENCE_SP) query2 ON ODEON_INTERVENTIONS.REFERENCE_SP = query2.REFERENCE_SP AND ODEON_INTERVENTIONS.INTERVENTIONDATECREATION = query2.maxDate
J'imagine donc que le problème vient de ma syntaxe sur la jointure, vu que les requêtes fonctionnent bien séparément... Mais je ne vois pas du tout ce que ça peut être
Un expert du INNER JOIN saurait-il m'aider ? Je lui en serais très reconnaissant![]()
Partager