Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut 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 : 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
    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
    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 : 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
    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

  2. #2
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 910
    Points : 9 073
    Points
    9 073

    Par défaut

    Bonjour,
    Pour résumer ta commande, tu fais ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    selectfrom ..
    where ..
    inner join () on ..
    Or les jointures se font avant la clause WHERE.

    Ce serait plus évidement si tu utilisais INNER JOIN pour toutes les jointures.

    Tatayo.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Merci pour la réponse rapide !

    Effectivement, ça n'aide pas ! Mais j'utilise un MAX avec GROUP BY dans mon second SELECT, or il me semblait que le WHERE devait être avant le GROUP BY

    GROUP BY irait alors à la fin ? ça me paraît bizarre puisqu'il ne concerne que le second SELECT

  4. #4
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 910
    Points : 9 073
    Points
    9 073

    Par défaut

    Le GROUP-BY est dans une sous-requête, donc il n'intervient pas ici.
    Dans la "synthèse" que j'ai mise dans mon message, il est entre les parenthèses.
    Si tu veux ça donne ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    selectfromwhereinner join (selectfromwheregroup by) on
    Le problème reste le même, tu as une jointure après un WHERE.

    Je te suggère d'utiliser des JOIN pour toutes tes jointures, ça va grandement simplifier la correction de ta requête, en plus de la rendre plus lisible en séparant critères de jointure et critère de filtrage.

    Tatayo.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    OK je vois mieux d'où vient le problème, je vais essayer tout ça, merci beaucoup !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 907
    Points : 1 064
    Points
    1 064

    Par défaut

    Bonjour,
    Ta modélisation n'est pas terrible, tu concatennes les données dans GROUPEINTERVENANT et GROUPEPRESTATAIRE, au lieu de faire une table d'association ayant un type. C'est pour cela que tu as du mal à reformuler ta première requete avec des inner join
    Pour en revenir à ton problème, en utilisant une CTE, est-ce que ceci conviendrait.
    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
    With data
    AS
    (
    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%'
        )
     
    )
    Select 
    from data d
    inner join
    (select ODEON_INTERVENTIONS.REFERENCE_SP, MAX(ODEON_INTERVENTIONS.INTERVENTIONDATECREATION) AS maxDate
    from data
    ) as MD
    on d.REFERENCE_SP=MD.REFERENCE_SP
    and D.INTERVENTIONDATECREATION=MD.maxDate
    Data representant ta première requete
    ce qui est aliasé par MD ta deuxième requete.
    Malgré tout, la modélisation est perfectible.
    Cordialement
    Soazig

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 907
    Points : 1 064
    Points
    1 064

    Par défaut

    Rebonjour,
    Concernant la modélisation, je te conseille de créer une table Intervention_groupe qui contient
    • INTERVENTIONID
    • GROUPID
    • Type (prestataire, intervenant)



    car là si dans ta colonne GROUPEINTERVENANT le premier groupe intervenant n'est pas précédé d'un ; tu ne le trouveras pas de même si la colonne GROUPEINTERVENANT ne termine pas pas par un ;
    Dans la plupart des cas,tes requêtes seront simplifiées.

    Cordialement
    Soazig

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Bonjour
    Merci pour ton temps soazig !
    Je n'ai malheureusement pas la main sur la base de données, je ne peux que lire les données

    Effectivement, ta solution m'irait très bien !
    J'ai juste un " ora-00936 missing expression" quand je l'essaie telle quelle, je vais essayer de voir d'où ça peut venir
    Merci encore

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 907
    Points : 1 064
    Points
    1 064

    Par défaut

    Bonjour,
    Il y a au moins une coquille dans ma requete, je n'ai pas préfixé les colonnes correctement dans la sous requete MD.
    De plus j'avais oublié la liste des colonne dans le select (oups!)
    Voilà la version corrigé, j'ai aussi changé data en my_data car mon éditeur de texte m'a indiqué qu'il s'agissait peut-être d'un mot reserve.
    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
    With My_data
    AS
    (
    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%'
        )
     
    )
    Select d.INTERVENTIONID,d.REFERENCE_SP,d.ReferenceProjet,d.INTERVENTIONDATECREATION, d.INTERVENTIONETAT,d.INTERVENTIONETATTECHNIQUE,d.INTERVENTIONCARACTERISTIQUES
    from My_data d
    inner join
    (	select REFERENCE_SP, MAX(INTERVENTIONDATECREATION) AS maxDate
    	from My_data
    ) as MD
    on d.REFERENCE_SP=MD.REFERENCE_SP
    and D.INTERVENTIONDATECREATION=MD.maxDate
    Désolée
    Soazig

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Ah oui effectivement !
    Et du coup si je veux que MD prenne la date max pour chaque référence_SP il faut que j'ajoute group by REFERENCE_SP non ?

    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
    With My_data
    AS
    (
    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%'
        )
     
    )
    Select d.INTERVENTIONID,d.REFERENCE_SP,d.ReferenceProjet,d.INTERVENTIONDATECREATION, d.INTERVENTIONETAT,d.INTERVENTIONETATTECHNIQUE,d.INTERVENTIONCARACTERISTIQUES
    from My_data d
    inner join
    (	select REFERENCE_SP, MAX(INTERVENTIONDATECREATION) AS maxDate
    	from My_data
    	group by REFERENCE_SP
    ) as MD
    on d.REFERENCE_SP=MD.REFERENCE_SP
    and D.INTERVENTIONDATECREATION=MD.maxDate
    J'ai aussi le message ORA-00905: Missing keyword maintenant
    T'aurais une idée rapide de quel point ça peut venir ?

    Sinon t'inquiètes, tu m'as déjà beaucoup aidé ! Merci encore d'ailleurs

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 907
    Points : 1 064
    Points
    1 064

    Par défaut

    Bonjour,
    Oups décidément j'ai accumulé les erreurs dans ma requete, avec le group by REFERENCE_SP, ça devrait aller mieux.
    Est-ce qu'avec ta requête (la mienne corrigée par tes soins) tu as toujours ORA-00905: Missing keyword

    Par ailleurs en général les SGBD indique à quel endroit se situe l'erreur ! Qu'utilises-tu pour tester tes requêtes, toad, sql plus , etc...
    Cordialement
    Soazig

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Avec ou sans le group by, j'ai cette même erreur
    Et j'utilise BusinessObject, je dois faire une requête SQL à la main car l'outil seul ne me permet pas d'extraire les bonnes données.
    Et malheureusement, BusinessObject n'indique pas d'où vient l'erreur...

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    5 213
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 5 213
    Points : 10 782
    Points
    10 782

    Par défaut

    Bonjour


    Essayez d'enlever le "AS" avant l'alias "MD" ligne 41

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2019
    Messages : 13
    Points : 7
    Points
    7

    Par défaut

    Effectivement, il a suffit d'enlever le "AS" et ça a fonctionné
    Merci à tous pour votre aide et votre temps ! Ma requête fonctionne exactement comme espéré

    Voici le code final :

    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
    With My_data
    AS
    (
    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%'
        )
     
    )
    Select d.INTERVENTIONID,d.REFERENCE_SP,d.ReferenceProjet,d.INTERVENTIONDATECREATION, d.INTERVENTIONETAT,d.INTERVENTIONETATTECHNIQUE,d.INTERVENTIONCARACTERISTIQUES
    from My_data d
    inner join
    (	select REFERENCE_SP, MAX(INTERVENTIONDATECREATION) AS maxDate
    	from My_data
    	group by REFERENCE_SP
    ) MD
    on d.REFERENCE_SP=MD.REFERENCE_SP
    and D.INTERVENTIONDATECREATION=MD.maxDate

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec INNER JOIN
    Par Tee shot dans le forum PHP & MySQL
    Réponses: 4
    Dernier message: 13/02/2008, 14h28
  2. Problème avec INNER JOIN
    Par jeanmarc1234 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/01/2008, 15h57
  3. Filtre pour inner join
    Par lolotte35 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 29/10/2007, 10h43
  4. problème requete inner join
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/04/2007, 12h48
  5. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo