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

Langage SQL Discussion :

[Oracle] selectionner la valeur la plus proche


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut [Oracle] selectionner la valeur la plus proche
    bonjour,

    j'aimerais savoir comment faire une requette du type select qui permetrait de choisir parmis les valeur possible d'un champ d'une table, celles qui se raprochent le plus d'une constante donnée.

    merci a tous.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Points : 36
    Points
    36
    Par défaut
    Imaginons la table Table1 qui comprend le champ Champ1 (PK) et le champ Champ2 ...
    Tu recherches la valeur de Champ2 la plus proche de la constante Cste1...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Champ1, Min(Abs(Champ2-Cste1))
    FROM Table1
    GROUP BY Champ1
    Attention, la fonction Abs n'est pas supportée par tous les SGBD... Quel est ton SGBD?

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Titia765
    Imaginons la table Table1 qui comprend le champ Champ1 (PK) et le champ Champ2 ...
    Tu recherches la valeur de Champ2 la plus proche de la constante Cste1...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Champ1, Min(Abs(Champ2-Cste1))
    FROM Table1
    GROUP BY Champ1
    Attention, la fonction Abs n'est pas supportée par tous les SGBD... Quel est ton SGBD?
    T'es sur(e) de toi ?
    Pour moi cette requete ne ramene pas le resultat escompté

    Jaoued, quel est pour toi la signification de "la plus proche" ?
    Est ce du numerique ? de l'alpha ? ...
    Quel est ton SGBD ?
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    la solution de Titia765 me parrait bonne, merci beaucoup Titia765.
    effectivement la valeur la plus proche pour moi signifie la valeur avec lequel l'ecart est minimum (chose que Titia765 a su traduire en langage mathematique avec brio).
    les champs que je traite sont du type numeric et mon sgbd est oracle pour repondre a ta question Yanika_bzh.

    merci a tous ceux qui ont lut ce poste et qui ont tenté de repondre.

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par jaoued
    la solution de Titia765 me parrait bonne, merci beaucoup Titia765.
    Non, elle n'est pas bonne : la requête proposée ramenera autant de lignes que de valeurs distinctes de Champ1, à cause du GROUP BY. Donc si Champ1 est PK, ça ne sert à rien ...
    Dans le cas où Champ1 n'est pas PK, la requête ne sert pas beaucoup non plus, car elle ne permet pas d'identifier la valeur de Champ2 qui répond au critère.

    Sur la structure proposée par Titia (avec Champ1 en PK), j'essayerais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Champ1, Champ2
      FROM Table1
     WHERE ABS(Champ2-Cste1) = (SELECT MIN(Abs(Champ2-Cste1))
                                  FROM Table1);
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    effectivement c'est encore mieux. merci Xo t'est vraiment genial

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

Discussions similaires

  1. La valeur la plus proche
    Par tripper.dim dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/09/2009, 17h32
  2. acces dans un treemap a la valeur la plus proche
    Par pcouas dans le forum Langage
    Réponses: 0
    Dernier message: 16/04/2009, 12h07
  3. Selectionner la date la plus proche
    Par goodboy dans le forum SQL
    Réponses: 4
    Dernier message: 14/08/2007, 11h36
  4. [MySQL] Extraire les 50 valeurs les plus proches d'un entier
    Par denis.ws dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/01/2007, 08h42
  5. Récupurer via une requête SQL la valeur la plus proche
    Par yoda_style dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/04/2004, 13h52

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