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êtes imbriquées Débutant


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Par défaut Requêtes imbriquées Débutant
    Bonjour,

    Voici mon cas :

    TABLE 1 et TABLE 2
    NOM RESULTID
    ANNEE LIB
    Debut ....
    Fin
    RESULTID
    ...

    Mon but est d'obtenir tous les (NOM,ANNEE,Debut) en éliminant ceux qui n'ont pas de bons résultats.
    Un couple (NOM,ANNEE) ayant plusieurs RESULTATS, je ne veux que le dernier effectué.
    J'ai donc fais une première requête :

    SELECT NOM, ANNEE, MAX(Debut)
    FROM TABLE1
    GROUP BY NOM, ANNEE

    Cela me donne bien les bons triplets J'ai donc plein de lignes NOM,ANNEE,Debut

    Ensuite j'aimerai ajouter d'autres informations de la table 1 et de la table 2 mais là j'ai un souci : comment faire la jointure sur tous ces éléments ?

    Par exemple :

    SELECT NOM, ANNEE, Debut, LIB, etc.
    FROM TABLE1, TABLE2
    ....

    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    J'ai du mal à voir la structure de tes tables. Et si tu leur donnais un nom explicite ce serait plus lisible.

    A quoi correspondent 'Debut' et 'Fin' ?

    RESULTID est-il une clé étrangère dans Table 1 correspondant à RESULTID de Table 2 ?

    Enfin bref, sans structure plus explicite, difficile de te répondre.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu as la fonction de groupement KEEP (DENSE_RANK..

    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
    WITH t AS(SELECT ROWNUM num, ROUND(TRUNC(SYSDATE) + ROWNUM *5 / 24) AS dte, CHR(64+ROWNUM) lib1, CHR(64+ROWNUM) || CHR(64+ROWNUM) lib2 FROM user_tables
            WHERE ROWNUM < 20
            )
    SELECT dte, MAX(num), 
          MAX(lib1) KEEP (DENSE_RANK LAST ORDER BY num) AS lib1,
          MAX(lib2) KEEP (DENSE_RANK LAST ORDER BY num) AS lib2
    FROM t
    GROUP BY dte
     
    DTE	MAX(NUM)	LIB1	LIB2
    03/07/2008	2	B	BB
    04/07/2008	7	G	GG
    05/07/2008	11	K	KK
    06/07/2008	16	P	PP
    07/07/2008	19	S	SS

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Par défaut
    Effectivement ce n'est pas très clair

    TABLE1
    NOM (clé)
    ANNEE
    Date_DEBUT
    Date_FIN
    RESULTID (pas de clé étrangère)
    ...

    TABLE2
    RESULTID (clé)
    LIBELLE
    ...

    Cette structure m'est imposée, même si elle n'est pas très top.

    Je récupère à l'heure actuelle un dataset de plusieurs centaines de lignes et j'aimerai n'avoir que la dernière ligne d'un triplet NOM/ANNEE/Date_Debut, c'est à dire celle où Date_Debut est la plus récente pour chaque année.

    J'espère être plus clair.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Donc keep dense_rank fera l'affaire.

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Par défaut
    Merci McM

    Je suis en train d'essayer
    Je vous tiens au courant

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Par défaut
    Aie. Ca ne fonctionne pas :

    La requête suivante fonctionne seule (elle me permet si j'ai bien compris de remonter l'ensemble de mes infos sans pouvoir filtrer sur ma date )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT NOM, ANNEE, ...
    FROM TABLE1
    Cela marche évidement mais ensuite si j'utilise (exemple simple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    With T AS(
    SELECT NOM, ANNEE, ...
    FROM TABLE1)
    SELECT NOM FROM T
    J'ai le messge : SQL statement doesn't return rows

Discussions similaires

  1. Pb requête imbriquée
    Par ddams dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/04/2004, 12h13
  2. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 22h52
  3. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  4. Requêtes imbriquées ?
    Par Ph. B. dans le forum XMLRAD
    Réponses: 7
    Dernier message: 06/05/2003, 13h19
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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