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 :

Récupérer la ligne dont une colonne donnée à la plus petite valeur


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut Récupérer la ligne dont une colonne donnée à la plus petite valeur
    bonjour à tous

    j'aimerais optimiser une requête me permettant de résoudre un problème qui me semble assez simple, mais je ne dois pas être bien réveillé

    la problématique est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    col1 | col2 | col3
    2    | 7    | x       
    1    | 7    | y
    3    | 7    | z
    5    | 8    | a
    6    | 8    | b
    4    | 8    | c
    j'ai besoin de récupérer la valeur se trouvant dans col3 pour la ligne possédant la plus petite valeur dans col1, pour chaque valeur de col2 (ici les deuxième et sixième lignes donc)

    je parviens à mes fins en utilisant deux select, mais ça ne me paraît vraiment pas top niveau perfs...

    une idée ?

    merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    quel est votre SGBD ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut
    bonjour

    c'est un oubli de ma part, au temps pour moi

    je travaille sous oracle 9i

    merci d'avance

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pour reposer le problème différement:
    il faut renvoyer toutes les lignes de la table, pour lesquelles il n'existe pas de ligne avec la même valeur de Col2 et une valeur de Col1 inférieure.

    Il ne reste plus qu'à le coder en SQL (avec not exists ou une jointure externe).

    Tatayo.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut
    bonjour tatayo

    cette solution pourrait fonctionner, mais il me semble qu'elle implique comme ma solution actuelle d'utiliser deux select... mais peut être que je passe à côté de quelque chose...

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Comment désirez-vous gérer les égalités, ce cas-là par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    col1 | col2 | col3
    1    | 7    | x       
    1    | 7    | y

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut
    bonjour,

    dans la table qui m'intéresse, ce cas ne se présente jamais

    la combinaison col1 - col2 est toujours unique

    merci pour votre aide

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez utiliser la fonction d'agrégat FIRST :
    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
    With MaTable as 
    (
    select 2 as c1, 7 as c2, 'x' as c3 from dual union all
    select 1      , 7      , 'y'       from dual union all
    select 3      , 7      , 'z'       from dual union all
    select 5      , 8      , 'a'       from dual union all
    select 6      , 8      , 'b'       from dual union all
    select 4      , 8      , 'c'       from dual
    )
      select min(c1) as c1
           , c2
           , min(c3) keep(dense_rank first order by c1 asc) as c3
        from MaTable
    group by c2
    order by c2 asc;
     
    C1 C2 C3
    -- -- --
     1  7 y
     4  8 c

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut
    merci pour votre aide, je teste ça de suite

Discussions similaires

  1. Récupérer la ligne dont la date est la plus récente
    Par Roflcho dans le forum Langage SQL
    Réponses: 10
    Dernier message: 03/02/2016, 11h45
  2. Réponses: 2
    Dernier message: 24/07/2013, 14h57
  3. [Toutes versions] Récupérer des valeurs dans une ligne dont une seule cellule est selectionnée
    Par Tommy57 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2010, 20h37
  4. Réponses: 2
    Dernier message: 18/02/2007, 21h30
  5. Réponses: 8
    Dernier message: 18/11/2006, 12h04

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