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 :

Extraction de table sans doublons


Sujet :

Langage SQL

  1. #1
    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 Extraction de table sans doublons
    Bonjour,

    J'aimerais faire une extraction d'une table contenant les colonnes suivantes :

    Id
    Date
    TypeDemande
    NoInsee
    IdPersonne

    En enlevant les doublons sachant qu'un doublons correspondant à des lignes ayant le même TypeDemande, NoInsee, IdPersonne (l'extraction étant journalière la date n'entre pas en ligne de compte).

    En gros je voudrais que l'extraction de la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Id  Date       TypeDemande  NoInsee  IdPersonne
    1  27/02/2013  A                  123         123
    2  27/02/2013  A                  123         123
    3  27/02/2013  T                  124         125
    4  27/02/2013  R                  124         125
    Me donne le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Id  Date       TypeDemande  NoInsee  IdPersonne
    1  27/02/2013  A                  123         123
    3  27/02/2013  T                  124         125
    4  27/02/2013  R                  124         125
    J'ai déjà tenté d'utiliser distinct mais je ne peut pas inclure Id et Date du coup (normal le sgbd ne sait pas quel Id choisir dans le doublons)...

    Donc il me faudrais faire un distinct maison en gros mais j'avoue que je sèche un peu... ma spécialité c'est plutot le java

    Quelqu'un aurais une idée de comment procéder à cette extraction?

    Merci d'avance de vos réponses!!!

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Quel SGBD ?
    En fonction du SGBD, first/last ou fonction analytique ou sous-requête type inline-view.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MAX(ID) AS ID, -- ou MIN(ID), au choix, selon le besoin
    	`Date`, TypeDemande, NoInsee, IdPersonne
    FROM la_table
    GROUP BY `Date`, TypeDemande, NoInsee, IdPersonne
    Remarque :
    'date' est un mauvais nom de colonne car c'est un mot réservé du langage SQL.
    C'est pour ça que je l'ai mis entre apostrophes inversées, à la manière de MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Date ne fait pas parti du critère de dédoublonnage, donc il lui faudrait obligatoirement un min ou max mais reste à savoir si min(date) correspondra bien toujours au min(id), si c'est le cas c'est le plus simple sinon cf mon post ci-dessus.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Date ne fait pas parti du critère de dédoublonnage, donc il lui faudrait obligatoirement un min ou max mais reste à savoir si min(date) correspondra bien toujours au min(id), si c'est le cas c'est le plus simple sinon cf mon post ci-dessus.
    En fait, j'avais mal compris cette phrase :
    (l'extraction étant journalière la date n'entre pas en ligne de compte).
    C'est plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MAX(ID) AS ID, -- ou MIN(ID), au choix, selon le besoin
    	TypeDemande, NoInsee, IdPersonne
    FROM la_table
    WHERE `Date` = :la_date
    GROUP BY TypeDemande, NoInsee, IdPersonne
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    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
    Areuhh!!

    Merci a tous de vos réponses.

    Il s'agit d'un SGBD Oracle et oui je sais que le nom du champ n'est pas bon il s'agit juste d'un exemple (et parcque j'avais la flemme de faire un copier coller des noms cryptiques que nous utilisons comme noms de colonnes ).

    Et un grand merci à CinePhil ta requête donne exactement le résultat que je désire après une petite modification pour inclure la date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MAX(ID) AS ID, MAX(DATDMECTE) as DATDMECTE,
    	TypeDemande, NoInsee, IdPersonne
    FROM la_table
    GROUP BY TypeDemande, NoInsee, IdPersonne
    J'ai été obligé de faire un max sur le champ de date pour que le group by fonctionne mais ça n'influe pas sur le résultat car comme je l'ai dit l'extraction est journalière donc la date sera la même sur toutes les lignes, en fait ma requête ressemble plus à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MAX(ID) AS ID, MAX(DATDMECTE) as DATDMECTE,
    	TypeDemande, NoInsee, IdPersonne
    FROM la_table
    WHERE DATDMECTE = dateDuJour
    GROUP BY TypeDemande, NoInsee, IdPersonne

    En tous cas merci le problèmes est résolu (a moins que quelqu'un propose une solution plus simple/plus performante mais la vu la simplicité de ce qui est proposé j'en doute )

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

Discussions similaires

  1. union de deux tables sans doublons
    Par saou85 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 03/09/2010, 16h20
  2. Fusion de table sans doublon
    Par dfrthreads dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 10/08/2010, 11h55
  3. Charger une table sans doublons
    Par moheissenger dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 23/02/2010, 18h16
  4. Ajout dans une table sans doublon
    Par Cbonniot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/05/2009, 10h31
  5. Table sans doublon
    Par juliojc13 dans le forum IHM
    Réponses: 6
    Dernier message: 18/06/2007, 19h53

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