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

MS SQL Server Discussion :

SQL SERVER: choisir la ligne qui a la date récente parmi les doublons dans une table


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut SQL SERVER: choisir la ligne qui a la date récente parmi les doublons dans une table
    Bonjour,

    je travaille avec SQL SERVER, j'ai des enregistrements doublons dans une table (matricule,Nom,DateAff). pour chaque matricule je veux choisir une seule ligne qui a la date la plus récente parmi les doublons relatif au même matricule, comme ça je peux indéxé ma table sur la champs matricule.

    y'a t'il une requête SQL SERVER qui permet de faire ça ?
    sinon , je veux savoir comment je peux le faire.

    Merci de votre aide.

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    essaye qqch ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select matricule, nom, max(dateaff) , count (*)
    from tables
    group by matricule, nom
    HAVING COUNT(*) > 1

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 882
    Points : 53 063
    Points
    53 063
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matricule, nom, max(dateaff)
    FROM TABLES
    GROUP BY matricule, nom
    HAVING max(dateaff)  = dateaff
    tout simplement !

    A +

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut SQL SERVER : doublons
    Citation Envoyé par SQLpro Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matricule, nom, max(dateaff)
    FROM TABLES
    GROUP BY matricule, nom
    HAVING max(dateaff)  = dateaff
    tout simplement !

    A +
    Merci beaucoup,
    J'ai utilisé la requete (sans Having parce que je ne veux afficher tous les groupes sans clause Having de trie)
    et ça marche pour afficher la ligne à date max pour chaque matricule.

    Merci Beaucoup encore.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut SQL SERVER : les espace au milieu d'une chaîne de caractères
    Citation Envoyé par nyrami Voir le message
    Merci beaucoup,
    J'ai utilisé la requete (sans Having parce que je ne veux afficher tous les groupes sans clause Having de trie)
    et ça marche pour afficher la ligne à date max pour chaque matricule.

    Merci Beaucoup encore.
    Une autre question stp , à part TRIM() (et ses dérivées TRIM() et RTRIM())
    y a t'il une fonction dans SQL SERVER qui supprime tous les espaces dans une chaine de caractère même les blancs du milieu ?

    merci bcp.
    Bonne journée

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Tu peux faire avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REPLACE(maChaîne, ' ', '')
    A+

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut SQL SERVER : Supprimer les espace, éliminer les doublons
    Citation Envoyé par elsuket Voir le message
    Bonsoir,

    Tu peux faire avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REPLACE(maChaîne, ' ', '')
    A+
    Je tiens à vous remercier infiniment de m'avoir aidé.
    et je tiens également à remercier tous les participants au forum des développeurs, vous faites un excellent travail, vous êtes des Pro.

    merci beaucoup.
    (je suis toujours sauvé par vos réponse à mes question )

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 310
    Points : 157
    Points
    157
    Par défaut
    Bonjour à tous,

    Recherchant la même problématique je suis tombé sur ce post et je te cite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matricule, nom, max(dateaff)
    FROM TABLES
    GROUP BY matricule, nom
    HAVING max(dateaff)  = dateaff
    Ce code plante car il ne trouve pas DateAff dans la clause group by

    La colonne 'dateaff' n'est pas valide dans la clause HAVING parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

  9. #9
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    Citation Envoyé par SoaB Voir le message
    Ce code plante car il ne trouve pas DateAff dans la clause group by
    Le message est clair, il suffit de l'ajouter dans la clause group by
    SELECT matricule, nom, max(dateaff)
    FROM TABLES
    GROUP BY matricule, nom, dateaff
    HAVING max(dateaff) = dateaff

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 310
    Points : 157
    Points
    157
    Par défaut


    Ca ne donnerait pas le résultat escompté à savoir ne pas renvoyer les doublons !

  11. #11
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    Par défaut
    ça devait bien faire rire ça lol

    c'est vrai SoaB t'as raison, ceci ne pouvait pas éliminer les doublons, à part la ptite faute que j'ai fais sur la requête :-), j'ai pas fais attention que je n'ai pas mentionné la dateaff dans la sélection déjà ....
    bon j'essaie une autre tentative, j'espère que ça sera plus utile ...(toujours sans tester la requête... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT matricule, nom,dateaff , max(dateaff)
    FROM TABLES
    GROUP BY matricule, nom, dateaff
    HAVING max(dateaff) = 
     
    (select dateaff from (
     
          select dateaff ,min(matricule) from TABLES group by dateaff )

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2013, 14h03
  2. Réponses: 2
    Dernier message: 03/06/2011, 20h29
  3. insertion d'un doublons dans une table SQL 2000
    Par Paradisma dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/10/2010, 21h38
  4. Réponses: 2
    Dernier message: 14/06/2007, 22h24
  5. [pl-sql] Recherche de doublons dans une table
    Par tommey dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 22h53

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