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 :

Ne pas afficher doublons dans une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Ne pas afficher doublons dans une requête
    Bonjour,

    J'ai un sérieux problème.

    Je cherche a ne pas afficher des doublons dans une requête Access par le champ ou contient une date modifiable.

    Voici ma table (Archive):
    Numéro auto (NUM)
    Le numéro de l'employé (Matricule)
    La date de l'entrée (DateNote)
    Une note (Note)

    Il se peut qu'un employé ait plusieurs note à son dossier. Donc dans ma requête, je veux qu'il n'affiche qu'une fois l'employé mais avec la date la plus récente dans la colonne DateNote de la table Archive. La date peut par compte changer dans un enregistrement et c'est pour cela que je dois me fichier au champ DateNote. Donc une note (un enregistrement) par Matricule.

    J'ai:
    NUM Matricule DateNote Note
    1 100 2011-10-01 note1
    2 100 2011-12-19 note2
    3 200 2012-01-05 note3
    4 300 2011-11-01 note4
    5 300 2011-10-20 note5

    Et j'ai besoin qu'il m'affiche:
    NUM Matricule DateNote Note
    2 100 2011-12-19 note2
    3 200 2012-01-05 note3
    4 300 2011-11-01 note4

    J'ai essayé les fonctions Premier, Dernier, DISTINCT, etc... et ça ne fonctionne pas.

    Merci!

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    C'est un problème classique où le langage sql n'est pas très performant... Je te propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from maTable T where MaDate=(select max(MaDate) from MaTable x where x.MonId=T.MonId)

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    une autre solution sans sous-requête conditionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT T.Num, T.Matricule, T.DateNote, T.Note
    FROM tMAT AS T 
    INNER JOIN 
    (SELECT Matricule, MAX(DateNote) AS MaxDate FROM tMat GROUP BY Matricule)  AS R 
    ON (T.Matricule=R.Matricule) AND (T.DateNote=R.MaxDate);
    philippe

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Bigaccess, Nico84 et Philben,

    Je me permets de m'immiser, Nico84 et Philben...

    C'est, effectivement, un besoin qui revient souvent pour lequel il est nécessaire, d'un point de vue "formation" de "se mettre à la place de "SQL".

    Bigaccess, SQL doit d'abord savoir quelle est la date la plus récente par employé (la sous-requête), et ensuite afficher les renseignements qui t'intéressent (info de l'enregistrement trouvé par la sous-requête).

    C'est un peu comme si, dans une file de personnes, tu voulais connaître le nom de la personne la plus petite. Méthode :
    1. trouver la personne la plus petite (une sorte de sous-requête) ;
    2. lui demander son nom (information trouvée dans a sous-requête).


    La morale de l'histoire, c'est que tout n'est pas forcément possible en une seule fois.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Fonctionne!
    Bonjour,

    Tu as raison Richard_35.

    Mais la solution de philben fonctionne très bien.

    Et ce, avec qu'une seule requête sans sous requête.

    Merci à tous!

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Bigaccess
    Mais la solution de philben fonctionne très bien.
    ==> c'est vrai , Philben.


    Citation Envoyé par Bigaccess
    Et ce, avec qu'une seule requête sans sous requête.
    ==> !... comment appelles-tu la partie en rouge ?...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T.Num, T.Matricule, T.DateNote, T.Note
    FROM tMAT AS T 
    INNER JOIN 
    (SELECT Matricule, MAX(DateNote) AS MaxDate FROM tMat GROUP BY Matricule)  AS R 
    ON (T.Matricule=R.Matricule) AND (T.DateNote=R.MaxDate);
    ==> SQL cherche, d'abord, la plus petite personne en question.

Discussions similaires

  1. Eviter les doublons dans une requête.
    Par Smint dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/03/2017, 16h17
  2. [AC-2007] Ne pas avoir de doublons dans une requête avec beaucoup de OU
    Par GroFlo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2012, 15h52
  3. Fusionner sans doublons dans une requète
    Par Michaël HENNEQUIN dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/02/2009, 16h27
  4. Problème de doublons dans une requète complexe
    Par noakiss dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/03/2008, 09h19
  5. Doublons dans une requète complexe
    Par noakiss dans le forum VBA Access
    Réponses: 0
    Dernier message: 19/03/2008, 15h30

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