IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

SQL Oracle Discussion :

Requête imbriquée ou inner join


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut Requête imbriquée ou inner join
    Bonjour à tous,

    J'ai une base oracle 10 avec ces 3 tables :

    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
    xbasecomp
    +---------+------------+
    |itmref_0 | supdat_0   |
    +---------+------------+
    | ref1    | 2023-08-02 |
    | ref2    |            |
    | ref3    | 2023-10-10 |
    +---------+------------+
     
    itmmaster
    +---------+------------+
    |itmref_0 | itmsta_0   |
    +---------+------------+
    | ref1    | 1          |
    | ref2    | 2          |
    | ref3    | 6          |
    +---------+------------+
     
    stojou
    +---------+--------------+------------+
    |itmref_0 | loc_0        | iptdat_0   |
    +---------+--------------+------------+
    | ref1    | emp1         | 2023-01-10 |
    | ref1    | emp2         | 2022-05-15 |
    | ref3    | emp10        | 2021-10-26 |
    | ref3    | emp8         | 2022-04-22 |
    | ref3    | emp25        | 2023-10-01 |
    | ref2    | emp1         | 2023-10-31 |
    | ref2    | emp3         | 2023-08-18 |
    +---------+--------------+------------+
    Je veux obtenir dernier emplacement (stojou.loc_0) occupé pour une référence article (itmmaster.itmref_0) ayant le status (itmmaster.itmsta_0 = 6) après le 1 octobre (xbasecomp.supdat_0)

    Avec le jeu de données je devrais obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +----------+-------+------------+
    | itmref_0 | loc_0 | supdat_0   |
    +----------+-------+------------+
    | ref3     | emp25 | 2023-10-10 |
    +----------+-------+------------+
    J'ai essayé deux méthodes avec les requêtes imbriqués mais sans grand succès (et j'ai plus la requête sous la main). Ensuite j'ai essayé avec les INNER JOIN mais il me renvoie n'importe quoi comme résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT x.ITMREF_0, s.LOC_0
    FROM XBASECOMP x 
    INNER JOIN ITMMASTER i ON i.ITMREF_0 = x.ITMREF_0 
    INNER JOIN STOJOU s ON s.ITMREF_0 = x.ITMREF_0 
    INNER JOIN (
    	SELECT s2.ITMREF_0, MAX(s2.IPTDAT_0) "MaxSup" 
    	FROM STOJOU s2
    	GROUP BY s2.ITMREF_0
    ) maxd ON x.ITMREF_0 = maxd.ITMREF_0
    WHERE
    	x.SUPDAT_0 > TO_DATE('2023-10-01', 'yyyy-mm-dd') AND
    	i.ITMSTA_0 = 6
    Je sèche complètement, auriez-vous une idée pour m'aider ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      select x.ITMREF_0
           , max(s.LOC_0) keep(dense_rank first order by s.IPTDAT_0 desc) as LOC_0
        from XBASECOMP x
        join ITMMASTER i on i.ITMREF_0 = x.ITMREF_0
        join STOJOU    s on s.ITMREF_0 = x.ITMREF_0
       where x.SUPDAT_0 > date '2023-10-01'
         and i.ITMSTA_0 = 6
    group by x.ITMREF_0;

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut
    Nikel comme ça !

    Faut que je regarde à quoi sert exactement keep(dense_rank first order by s.IPTDAT_0 desc)

    Merci.

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

Discussions similaires

  1. [AC-2007] Créer une requête imbriquant deux INNER JOIN
    Par Olivier JC dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/09/2009, 23h23
  2. [SQL] Requête SELECT et INNER JOIN
    Par polemoss dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 17/01/2008, 14h11
  3. [Access] Problème dans une requête SQL avec INNER JOIN ?
    Par bds2006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/06/2006, 10h57
  4. [SQL] Requête dans une requête...avec des INNER JOIN!
    Par PedroBD dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 06/04/2006, 08h26
  5. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 17h55

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