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

Oracle Discussion :

Sous-requetes SQL Oracle MsQUERY


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Sous-requetes SQL Oracle MsQUERY
    Dans une table qui posséde 4 colonnes ("Matériel" , "Date", "Prix1", "Prix2") ,
    La date représente la derniére date de modif de Prix1 et Prix2 , donc il existe plusieurs enregistrement pour chaque "Matériel".
    j'aimerai faire une requête sur max(date) pour pouvoir récupérer 1 seul enregistrement (derniére date de modif) par "Matériel", "Date", "Prix1" , "Prix2".
    Si je fais une requête avec les deux champs "Matériel" et "max(date)" avec un group by sur "Matériel" , je retrouve exactement les enregistrements que je veux mais je n'ai pas les prix.
    Je pense donc passer par une sous-requete pour les prix , mais comme je n'en ai jamais fait , je reste un peu sec . Quelqu'un a-t-il une solution à me proposer ?

    Nota : j'utilise Microsoft Query Version 2000 pour faire mes requêtes sur une base Oracle 8.1.7 .

    Merci

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il y a au moins 2 façons d'écrire la requête soit avec une requête imbriquée (plutôt classique) soit avec une fonction analytique ( plutôt moderne):


    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    SQL> 
    SQL> drop table article;
     
    Table dropped.
     
    SQL> 
    SQL> alter session set nls_date_format = 'DD-MON-YYYY';
     
    Session altered.
     
    SQL> 
    SQL> create table article (materiel number, prix1 number, prix2 number, modif date);
     
    Table created.
     
    SQL> 
    SQL> insert into article values(1, 10, 11, '01-JAN-2006');
     
    1 row created.
     
    SQL> insert into article values(1, 11, 22, '01-APR-2006');
     
    1 row created.
     
    SQL> insert into article values(2, 7, 8, '20-FEB-2006');
     
    1 row created.
     
    SQL> commit;
     
    Commit complete.
     
    SQL> 
    SQL> --
    SQL> -- requête imbriquée
    SQL> --
    SQL> 
    SQL> select materiel, prix1, prix2, modif from article a1
      2  where modif = (select max(a2.modif) from  article a2 where a2.materiel = a1.materiel);
     
      MATERIEL      PRIX1      PRIX2 MODIF                                          
    ---------- ---------- ---------- -----------                                    
             1         11         22 01-APR-2006                                    
             2          7          8 20-FEB-2006                                    
     
    SQL> 
    SQL> 
    SQL> --
    SQL> -- fonction analytique
    SQL> --
    SQL> 
    SQL> select * from (select materiel, prix1, prix2,
      2  	     max(modif) over (partition by materiel) date_derniere_modif,
      3  	     row_number() over (partition by materiel order by modif desc) rn
      4  	     from  article)
      5  	     where rn = 1;
     
      MATERIEL      PRIX1      PRIX2 DATE_DERNIE         RN                         
    ---------- ---------- ---------- ----------- ----------                         
             1         11         22 01-APR-2006          1                         
             2          7          8 20-FEB-2006          1                         
     
    SQL> 
    SQL> exit
    Pour la façon classique qui utilise aussi la corrélation de variable voir section 4.4 de ftp://ftp-developpez.com/oracle/guide/SQL.pdf

    Pour les fonctions analytiques, voir http://lalystar.developpez.com/fonctionsAnalytiques/

Discussions similaires

  1. Datacombo + Requetes SQL Oracle
    Par Tatoine dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/06/2007, 14h08
  2. DIVISION dans une requete sql ORACLE
    Par medonline dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/01/2007, 12h51
  3. sous requete SQL
    Par Invité dans le forum Langage SQL
    Réponses: 48
    Dernier message: 02/01/2007, 12h32
  4. Plusieurs sauvegardes d'une sous-requete SQL
    Par at_first dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 04/12/2006, 17h52
  5. Requete SQL Oracle
    Par Nounoursonne dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/07/2006, 11h48

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