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 :

comment supprimer des doublons et ne garder que le plus récent


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Points : 26
    Points
    26
    Par défaut comment supprimer des doublons et ne garder que le plus récent
    Bonjour je suis entrain d'achever une petite base dont vous trouverez la modélisation ci dessous. Cependant il me reste deux problèmes à solutionner.
    Elliminer certains doublons d'enregistrements tout en gardant le plus récent et
    identifier les techniques pour lesquelles l'élève x n'a pas encore été évalué.
    J'ai bien compris que je devais utiliser un right join pour faire un bilan des techniques non évaluées pour tel élève. Mais comment dois je procéder étant donné qu'entre mes techniques et ma table élèves il y a des tables intermédiaires? Dois je faire des right join sur toutes les tables intermédiaires ?

    Concernant le premier problème évoqué,en résumé un élève peut avoir plusieurs évaluations sur le m^me sujet ou la m^me technique. Il faut donc que je parvienne à ne garder que la dernière évaluation.
    Je réussis à identifier les doublons de ma base/ L'élève 1 à été x fois évalué sur la technique2 (il existe d'ailleurs une requête spéciale) mais je ne sais pas comment traiter tous les élèves en même temps, tout en réussissant à isoler pour chacun d'entre eux et pour chacune des techniques "doublonnées" le doublon le plus récent.


    Merci par avance de m'éclairer
    http://wachoandre.free.fr/indivi.jpg

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Récupérer les evaluations dans une table avec Eleves_IDeleve, DateEval
    Créer une requete avec regroupement sur Eleves_IDeleve et le Max de DateEval , eventuellement stocker le résultat dans une table
    Ces données vont permettre par une nouvelle requete de sélectionner les dernieres evaluations en liant les champs correspondant.

    Pour récupérer les evaluations non effectuées, des jointures à droite, sur une successions de tables, peuvent le faire.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Points : 26
    Points
    26
    Par défaut suite doublons
    Tout d'abord merci de votre aide
    Concernant les doublons j'ai donc suivi vos conseils
    1) création d'un requete (création de table) avec id eleve, date eval et nom technique
    2) a partir de cette nouvelle table, création d'une requête avce regroupement sur l'id_eleve et nomtechnique et une agrégation sur date eval en Max
    3) Je me retrouve donc avec l'évaluation la plus récente
    de chaque technique évaluée pour chaque élève

    Mais je ne comprends pas ensuite ce que je dois fairepour supprimer les anciens doublons de la base et ajouter à la place les bons que l'on vient d'isoler


    Concernant le second problème je n'ai pas réussi à lier une technique non évaluée à un élève.

    Merci

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    si la table qui récupère les dates max s'appelle MaxDates, la requête suivantes supprimera de la table Evals les evaluations les plus anciennes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DELETE Evals.Dateeval, Evals.Eleves_IDeleve, MaxDates.MaxDeDateeval
    FROM Evals LEFT JOIN MaxDates ON (Evals.Eleves_IDeleve = MaxDates.Eleves_IDeleve) AND (Evals.Dateeval = MaxDates.MaxDeDateeval)
    WHERE (((MaxDates.MaxDeDateeval) Is Null));
    On supprime les eleves&dates qui ne sont pas dans la table MaxDates
    Pour ne pas supprimer ceux qui n'ont pas d'évaluations, il faut les rajouter avant dans MaxDates

    On ne supprime pas, on conserve les enregistrements de Evals qui correspondent à ceux de MaxDates

    Pour récupérer les eleves non liés à une technique, il faut en effet une jointure à droite
    pour cela créer une requete r1 par exemple qui donne toutes les possibilités
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT eleves.IDeleves, eleves.Nom, eleves.prenom, technos.idtechno, technos.sujet FROM eleves, technos;
    puis une requete r2 qui donnera les eleves à qui manque une technique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT r1.IDeleves, r1.Nom, r1.prenom, r1.idtechno, r1.sujet, evals_techno.idtechno
    FROM r1 LEFT JOIN evals_techno ON (r1.IDeleves = evals_techno.ideleve) AND (r1.idtechno = evals_techno.idtechno)
    WHERE (((evals_techno.idtechno) Is Null));
    c'est la jointure à droite

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Réponses: 3
    Dernier message: 19/11/2012, 16h26
  3. Réponses: 0
    Dernier message: 14/09/2010, 23h32
  4. Ne garder que la plus récente revision
    Par Mytå_Qc dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/11/2007, 08h08

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