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

Requêtes MySQL Discussion :

La valeur la plus proche


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut La valeur la plus proche
    Salut à tous,

    Cette discussion avait je pense déjà été ouverte en son temps, mais sans être résolu, la revoici.

    J'ai une table avec des valeurs réels et je dois avoir l'identifiant de la/des valeurs les plus proches. Voici de quoi créer le schéma, la table et les valeurs pour l'exemple vous donnant le résultat que je souhaite avoir.

    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
    -- MySQL Administrator dump 1.4
    --
    -- ------------------------------------------------------
    -- Server version	4.1.8-nt
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
     
     
    --
    -- Create schema MONSCHEMA
    --
     
    CREATE DATABASE IF NOT EXISTS MONSCHEMA;
    USE MONSCHEMA;
    DROP TABLE IF EXISTS `matable`;
    CREATE TABLE `matable` (
      `IDENTIFIANT` int(10) unsigned NOT NULL auto_increment,
      `MAVALEUR` double NOT NULL default '0',
      PRIMARY KEY  (`IDENTIFIANT`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    /*!40000 ALTER TABLE `matable` DISABLE KEYS */;
    INSERT INTO `matable` (`IDENTIFIANT`,`MAVALEUR`) VALUES
     (1,200),
     (2,221),
     (3,221),
     (4,223),
     (5,225),
     (6,225.5),
     (7,227),
     (8,227),
     (9,228);
    /*!40000 ALTER TABLE `matable` ENABLE KEYS */;
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    Je donne donc une valeur réel et je dois avoir comme réponse la valeur la plus proche existante dans matable aussi bien vers le haut que vers le bas.

    Exemple :
    Je recherche la valeur 221 mon retour dois être 2 et 3 (221)
    Je recherche la valeur 222.7 mon retour dois être 4 (223 )
    Je recherche la valeur 225.2 mon retour dois être 5 (225)
    ...

    D'avance merci pour votre réponse.


  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    En passant par une sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT identifiant
    FROM matable
    WHERE ABS(mavaleur - 221) = (
    	SELECT MIN(ABS(mavaleur - 221))
    	FROM matable
    )
    Cela nécessite de faire figurer 2 fois la valeur de comparaison (ici, le 221) : une fois dans la requête principale et une fois dans la sous-requête.
    Mais ça fonctionne, ce qui est le but recherché .

    ced

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    je me permets de relancer le sujet mais en augmentant la difficulté. Au lieu de renvoyer 1 seul identifiant, je cherche une requête qui renvoie les x identifiants les plus proches, x étant un paramètre constant.

    Par exemple, quels sont les 3 identifiants les plus proches de 222.7 ?

    merci !

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

Discussions similaires

  1. trouver valeur la plus proche dans une colonne
    Par niepoc dans le forum Général Python
    Réponses: 10
    Dernier message: 05/06/2009, 15h02
  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. [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
  4. [Oracle] selectionner la valeur la plus proche
    Par jaoued dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/03/2006, 21h15
  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