Problèmes pour INNER JOIN
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:
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
Code:
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 |
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
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 :
Code:
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 |
Mais je me mange l'erreur ORA-00933: SQL command not properly ended.
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 :)