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 et SQL. Discussion :

Limiter une requête aux X premières occurences


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut Limiter une requête aux X premières occurences
    Bonjour,

    J'ai une table toute bête avec, en résumant, des noms de personnes leur métier et leur age.

    Je souhaiterais faire un report, et à fortiori une requête avant, où dans chaque métier ne prendre que les 3 personnes les plus agées, donc en gros afficher mes données filtrées sur les 3 premiers personnes trouvés en âge décroissant pour chaque metier.

    Je peux faire ça en vba en traitant ma table et supprimant ce qui ne me plait pas ou flaggant ce que je veux garder mais bon...peut être avez vous une solution plus simple, soit dans une requête, soit directement dans l'état qui affichera mon résultat.

    Donc, si vous avez une idée,

    Bonne journée,

    Laurent

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    Oui tu a effectivement une solution plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP X Matable.MonChamp FROM Matable WHERE MonChamp = Condition
    Cordialement

    Mcfly

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    Merci,
    je ne connaissais pas,
    je vais essayer de faire joujou avec ça,
    bonne journée,

    Laurent

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    J'y suis presque mais ça coince encore car je n'arrive pas à mettre la clause order by (ma valeur numérique) en desc dans chaque requête et que mon top 3 soit basé dessus.
    Dans mon cas, je veux pour chaque requête avoir le TOP 3 des montants et et afficher les CONT correspondants et le OPS du WHERE.
    Je ne dois pas être loin...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT TOP 3 x.SommeDeAMOUNT_USD AS USD, x.OPERATION AS OPS, x.CONTINENT_NAME_LOG AS CONT
    FROM [REPORT D_LOG2_2] AS x
    WHERE (((x.OPERATION)="Depot Handling") AND ((x.INDEX)=4))
    ORDER BY x.SommeDeAMOUNT_USD DESC
     
    union
     
    SELECT TOP 3 x.SommeDeAMOUNT_USD AS USD, x.OPERATION AS OPS, x.CONTINENT_NAME_LOG AS CONT
    FROM [REPORT D_LOG2_2] AS x
    WHERE (((x.OPERATION)="Storage") AND ((x.INDEX)=4))
    ORDER BY x.SommeDeAMOUNT_USD DESC

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    En fait j'y arrive si ma tablme source est pré triée, dans ce cas je peux vider les order by et mon top 3 remène bien mes valeurs numériques en desc

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    Re moi,
    Je coince toujours avec mon TOP quand j'ai plusieurs champs à afficher

    J'ai une table du genre TITRE / GROUPE / SOUSSGROUPE / VALEUR

    Je souhaite afficher pour chaque TITRE les 3 plus grands GROUPE en VALEUR avec pour chaque GROUPE les 3 plus grands SOUS GROUPE en valeur et enfin la VALEUR du SOUSGROUPE retenu.

    Je suis arrivé à isoler pour chaque TITRE les 3 plus grands GROUPE en VALEUR via une requête alliant UNION et TOP sur chaque TITRE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select TOP 3 TITRE, GROUPE, VALEUR from MATABLE where TITRE = A
    union 
    select TOP 3 TITRE, GROUPE, VALEUR from MATABLE where TITRE = B
    union
    select TOP 3 TITRE, GROUPE, VALEUR from MATABLE where TITRE = C
    (MA TABLE étant déjà préalablement groupée et triée)

    Et j'obtiens donc une table du type TITRE+GROUPE+VALEUR propre de laquelle il faut que pour chaque GROUPE retenu je descende sur les 3 plus gros SOUS GROUPE en valeur issus de MATABLE.

    Mais je coince pour descendre aux sous groupes

    Merci

    Laurent

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    J'y suis presque,
    J'ai réussi à me constituer une table finale avec les données dont j'ai besoin.
    Ne me reste plus qu'à y conserver les enregistrements désirés, à savoir les 3 plus grandes Q3 des occurences OPERATION + CONTINENT + COUNTRY

    Ma table ressemble à ça (avec en rouge ce qui devrait être conservé)
    On voit bien que pour le premier TOP 3 potentiel (NORT AMERICA), il n'y a que 2 valeurs à prendre en compte donc on prend les 2, pour le second (CENTRAL AMERICA) ,il y 7 valeurs potentielles et là on prend bien le top3 (en rouge)

    Si pas possible, je le ferai en VB

    OPERATION CONTINENT COUNTRY Q2 Q3
    Chassis NORTH AMERICA UNITED STATES 6203190,97 6203070,85
    Chassis NORTH AMERICA CANADA 6203190,97 120,12
    Chassis CENTRAL AMERICA NETHERLANDS ANTILLES 49407,37 26755,37
    Chassis CENTRAL AMERICA MEXICO 49407,37 21957,46
    Chassis CENTRAL AMERICA VENEZUELA 49407,37 694,54

    Chassis CENTRAL AMERICA ANTIGUA AND BARBUDA 49407,37 0
    Chassis CENTRAL AMERICA BARBADOS 49407,37 0
    Chassis CENTRAL AMERICA BELIZE 49407,37 0
    Chassis CENTRAL AMERICA SAINT VINCENT AND THE GRENADINES 49407,37 0
    Depot Handling EUROPE NEDC 12413933,74 4765649,02
    Depot Handling EUROPE FRANCE 12413933,74 2248599,9
    Depot Handling EUROPE HDC 12413933,74 1960996,26

    Depot Handling EUROPE UNITED KINGDOM 12413933,74 590659,65
    Depot Handling EUROPE SPAIN 12413933,74 564975,95
    Depot Handling EUROPE DENMARK 12413933,74 138647,98
    Depot Handling EUROPE POLAND 12413933,74 72477,41
    Depot Handling EUROPE LATVIA 12413933,74 68245,33
    Depot Handling EUROPE NORWAY 12413933,74 64456,55

Discussions similaires

  1. [ODBC] Ajouter un LIMIT à une requête SQL
    Par thebarbarius dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/11/2010, 01h12
  2. Réponses: 1
    Dernier message: 14/06/2010, 11h02
  3. [MySQL] Limiter une requête et revenir à la ligne dans un tableau
    Par Baptiste78 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 21/04/2009, 18h57
  4. limiter une requête
    Par hexenez dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/02/2008, 18h15
  5. Réponses: 3
    Dernier message: 13/12/2007, 13h44

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