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.
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.
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...
Attention, la fonction Abs n'est pas supportée par tous les SGBD... Quel est ton SGBD?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Champ1, Min(Abs(Champ2-Cste1)) FROM Table1 GROUP BY Champ1
T'es sur(e) de toi ?Envoyé par Titia765
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)
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.
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 ...Envoyé par jaoued
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
effectivement c'est encore mieux. merci Xo t'est vraiment genial
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager