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 :

Minimum d'une Tranche


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut Minimum d'une Tranche
    Bonjour, j'ai besoin d'aide sur une requete (surtout sur sa faisablilté)

    J'ai la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Val1-----Val2
    920 -----12
    930 -----10
    930 -----15
    930 -----20
    940 -----12
    940 -----20
    Je souhaites récupérer, pour une valeur de VAL1 et de VAL2 donnée, l'occurence dont VAL1 est identique et la plus petite de VAL2 dont la valeur saisie est inférieure.

    Dans mon exemple, si je fourni :
    930 et 16, je souhaites avoir la ligne 3
    930 et 14, je souhaites avoir la ligne 2
    930 et 9, je souhaites avoir la ligne 1

    ...

    Je ne vois pas comment l'implémenter en SQL, avez vous une idée ??

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Ton exemple ne correspond pas à la règle que tu donnes

    La requête répondant à la règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  col1
        ,   MAX(col2)
    FROM    matable
    WHERE   col1 = :val1
        AND col2 <= :val2
    GROUP BY col1
    ;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Je vois bien un truc de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select val1, max(val2)
    from matable
    where val1 = ...
    and val2 < ...
    group by val1

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Merci pour ta réponse mais l'exemple fourni concorde avec ma demande !

    Je n'ai peut être pas été clair dans mes propos !!

    Ta requetes effectivement peut me retourner un "ensemble" de résultat (Dans le premier cas de mon exemple, il me renvoi les trois lignes du code 930), ce que je veux c'est qu'il me retourne une seule ligne, celle dont VAL2 de la table est supérieur à VAL2 fourni en entrée et dont VAL2 de la table est le plus grand.

    Toujours pour le même exemple, je souhaites donc qu'il me retourne uniquement la ligne 3 et non les trois lignes ...

    Merci pour ton aide !

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    J'avais tapé la requête un peu vite, je l'ai corrigée en ajoutant la clause GROUP BY.

    Sans clause GROUP BY, une requête comportant plusieurs colonnes dont une fonction de regroupement n'aurait pas du pouvoir s'exécuter si ton SGBD respectait la syntaxe du langage SQL.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Le GROUP BY à la fin, sinon ça ne marchera pas non plus !

    Je ne connais pas de SGBD qui accepte des fonctions de regroupement sans GROUP BY. Quand bien même ils ne revendiqueraient pas de satisfaire à la norme SQL, je serais curieux de voir comment ils exécutent leurs requêtes.

    Pour moi, la requête répond à ton besoin : le MAX permet justement qu'elle ne renvoie qu'une seule ligne.
    Par contre , ton exemple dit : "930 et 9, je souhaites avoir la ligne 1", ce qui correspond à un val1 = 920, et là ça n'est plus en accord avec ton énoncé, et en plus ça doit être une belle usine à gaz à coder...

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Merci pour vos réponse, je penses que je vais pouvoir y arriver avec cela ...

    Merci à vous

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

Discussions similaires

  1. [AWT] JFrame - Mettre une taille minimum sur une Jframe
    Par rabobsky dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 27/07/2005, 18h20
  2. [wxPython] Imposer une hauteur minimum à une wxFrame
    Par Falken dans le forum wxPython
    Réponses: 3
    Dernier message: 07/04/2005, 20h57
  3. recuperer les minimum d'une séquence d'entiers?
    Par novice12 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 25/01/2005, 03h44
  4. trouver le minimum d'une liste
    Par speed034 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/12/2004, 12h29
  5. Taille minimum pour une JFrame ou une JInternalFrame
    Par sixkiller dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 30/11/2004, 15h26

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