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 :

[Débutant] enchainer des MAX


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut [Débutant] enchainer des MAX
    Re-bonjour.

    Encore un probleme que je ne sais pas résoudre en SQL, j'espere que quelqu'un pourra m'aider.

    j'ai une table avec 3 colonnes: GAMME, VERSION, INDICE.

    j'aimerais retourner la gamme la plus récente, c'est a dire celle dont la version est la plus grande, et parmis celles dont la version est la plus grande, celle dont l'indice est le plus élevé.

    il y a une relation hiérarchique, on regarde d'abord la version puis l'indice. la version 3 indice 0 est considérée plus récente que la version 2 indice 4.

    Je n'ai pas la moindre idée de comment réaliser ce tri et sortir mon résultat.

    Si quelqu'un pouvait m'aider ce serait bien gentil. Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Je pensais à un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT game, MAX(version), MAX(indice) FROM table GROUP BY game
    Mais je pense pas que ca marche.

    Dans ton exemple avec une version 3 indice 0 et une version 2 indice 4, il va te selectionner version 3 indice 4, ce qui n'existe pas.

    Question interressante, je vais chercher.

    Mais je pense que tu devrais pas dissocier version et indice dans ta table, tu devrais les mettre dans la meme colonne puisq'ils sont intimement liés. Si j'ai bien compris indice est une sous-version.

    Si tu avais une colonne avec version 3.0 et une version 2.4

    Tu pourrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT game, MAX(version) FROM table GROUP BY game

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Si j'ai bien compris indice est une sous-version.
    Oui

    Mais je pense que tu devrais pas dissocier version et indice dans ta table, tu devrais les mettre dans la meme colonne puisq'ils sont intimement liés.
    Séparer l'indice et la version n'est pas forcément judicieux, ceci dit je n'ai pas le moindre controle la dessus, mon role est simplement de ressortir des données depuis une base existante. Je n'ai pas le choix.

    Mais merci de t'interesser au probleme

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Si votre SGBDR gère le row value constructor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(GAMME, VERSION, INDICE)
    FROM ...
    Sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT GAMME_MAX, VERSION_MAX, MAX(INDICE) AS INDICE_MAX
    FROM   (SELECT GAMME_MAX, MAX(VERSION) AS VERSION_MAX, INDICE
            FROM   (SELECT MAX(GAMME) AS GAMME_MAX,  VERSION, INDICE
                    FROM...
                    GROUP BY  VERSION, INDICE) AS T
            GROUP BY GAMME_MAX, INDICE) AS TT
    GROUP BY GAMME_MAX, INDICE_MAX
    A +

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Si votre SGBDR gère le row value constructor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(GAMME, VERSION, INDICE)
    FROM ...
    Je connaissais pas cette syntaxe de MAX, merci de l'info, mais dans son cas ca serais pas plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT GAME, MAX(VERSION, INDICE)
    FROM ...
    GROUP BY GAME
    Vu qu'il veux la version max de chaque jeux, et pas le jeux max.

    Dans ce cas ta 2ème requête doit etre à corriger et à simplifier aussi

Discussions similaires

  1. [Débutant] Enchainer des requêtes dans pl/sql developer
    Par nighthammer dans le forum PL/SQL
    Réponses: 6
    Dernier message: 23/04/2008, 13h48
  2. Enchainer des fonctions dans un onclick d'un bouton
    Par jpg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2004, 16h51
  3. [Débutant] dessiner des carrés
    Par Dark-Lab dans le forum 2D
    Réponses: 13
    Dernier message: 27/08/2004, 10h50
  4. [IHM] Enchainement des écrans
    Par CanardJM dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/06/2004, 16h01
  5. [JSP][débutant] recupérer des variables...
    Par yass dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/04/2004, 11h05

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