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 :

Sélection ligne avec valeur maximale dans le champ3 pour chaque couple Champ1 et Champ2 [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Points : 29
    Points
    29
    Par défaut Sélection ligne avec valeur maximale dans le champ3 pour chaque couple Champ1 et Champ2
    Bonjour à tous!

    Je me retrouve une nouvelle fois dans la panade, et comme d'habitude après une demi-journée consacrée à résoudre un problème sans succès, je fais appel à plus compétent que moi...

    Je travaille sur une table de ce format :

    Libellé | Code | Statut | Numéro

    Les champs "Libellé", "Code", "Statut" peuvent contenir plusieurs fois la même valeur
    Le champ "Numéro" ne contient que des valeurs uniques.

    Je cherche à obtenir via une requête les lignes contenant la valeur maximale de "Numéro", pour chaque couple "Libellé" "Code".

    Par exemple, ma table d'origine :

    Nom : Capture.PNG
Affichages : 98
Taille : 9,4 Ko

    Donnerait cette table une fois la requête exécutée :

    Nom : 1.PNG
Affichages : 89
Taille : 5,8 Ko

    J'ai essayé avec une fonction MaxDom, mais je dois mal la rédiger, pourtant j'ai essayé d'adapter des exemples trouvés un peut partout, lu les tutoriels qui en parlaient...

    Auriez-vous une idée de comment je peux m'y prendre?

    Merci!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Et voilà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Table1.Libelle, Table1.Code, Table1.Statut, Max(Table1.Numero) AS MaxDeNumero
    FROM Table1
    GROUP BY Table1.Libelle, Table1.Code, Table1.Statut;
    A adapter bien sur

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Bonjour JeanYves70, merci pour ta réponse!

    Malheureusement, ça ne marche pas...j'ai adapté ton code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Extract statuts OPTIM avec doublons].[Libellé composition] AS Expr1, [Extract statuts OPTIM avec doublons].[Code panier-boîte], [Extract statuts OPTIM avec doublons].Statut, Max([Extract statuts OPTIM avec doublons].[Numéro actuel]) AS [Max]
    FROM [Extract statuts OPTIM avec doublons]
    GROUP BY [Extract statuts OPTIM avec doublons].[Libellé composition], [Extract statuts OPTIM avec doublons].[Code panier-boîte], [Extract statuts OPTIM avec doublons].[Statut];
    Mon nom de table est un peu compliqué désolée...

    Et le problème c'est que quand il existe, pour un même couple "Libellé composition" "Code panier-boîte" plusieurs valeurs distinctes de "Statut", il conserve toutes ces lignes : Par exemple :

    Nom : Capture.PNG
Affichages : 100
Taille : 7,4 Ko

    J'ai essayé de supprimer le champ "Statut" de GROUP BY, mais j'obtiens un message d'erreur...
    Sais-tu comment faire pour pouvoir visualiser ce champ sans qu'il conserve les lignes avec des valeurs distinctes de "Statut"?

    Merci pour ton aide!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    En ôtant "statut" comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Table1.Libelle, Table1.Code, Max(Table1.Numero) AS MaxDeNumero
    FROM Table1
    GROUP BY Table1.Libelle, Table1.Code;
    Car Statut provoque un niveau de regroupement supplémentaire.

    J'obtiens ceci :

    Libelle Code MaxDeNumero
    PetitLibelle 2 100004
    PetitLibelle 3 100005
    SuperLibelle 1 100002

    Comme l'exemple sur ton premier post

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Eh oui...c'est bien le problème, il me faut le champ statut...Est-ce impossible?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    C'est possible en passant par une table intermédiaire.

    Etape 1 création de la table intermédiaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Table1.Libelle, Table1.Code, Max(Table1.Numero) AS MaxDeNumero INTO TableIntermediaire
    FROM Table1
    GROUP BY Table1.Libelle, Table1.Code;
    Etape 2 requête avec les 2 tables et un lien entre Numero et MaxDeNumero. Tu as bien dis que numéro est unique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT TableIntermediaire.Libelle, TableIntermediaire.Code, Table1.Statut, TableIntermediaire.MaxDeNumero
    FROM Table1 INNER JOIN TableIntermediaire ON Table1.Numero = TableIntermediaire.MaxDeNumero;
    Résultat obtenu :

    Libelle Code Statut MaxDeNumero
    PetitLibelle 2 Sale 100004
    PetitLibelle 3 Sale 100005
    SuperLibelle 1 Sterile 100002

    Et voilà

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Waou! Merci mille fois, c'est top!
    Je n'ai pas encore cette logique d'associer des requêtes pour un résultat final, un jour j'espère, à force d'utiliser les bons conseils d'experts 😀

    Merci encore !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/04/2015, 15h44
  2. Réponses: 4
    Dernier message: 31/01/2014, 12h38
  3. Réponses: 1
    Dernier message: 09/02/2012, 19h30
  4. [Toutes versions] Sélection des enregistrements avec valeur maximale
    Par damsmut dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 02/03/2011, 14h37
  5. Réponses: 13
    Dernier message: 06/07/2006, 12h25

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