SQL server -doublons

saad_7013 Messages postés 1 Statut Membre -  
jee pee Messages postés 31885 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

 je voulais enlever les doublons mais  avec des conditions , 

exemple de résultat de ma requête : 

  1. non    200   alain   alian   A100  2022/01/01    2022/05/05
  2. non    500   alain   alian   NULL  2023/01/01    2023/09/15
  3. non    600   alain   alian   NULL  2025/01/01     2025/10/28
  4. OUI    200   alain   alian   A100  2022/01/01     2022/09/09

Je voulais enlever le 1 ligne qu'est en doublon avec le 4 

​​​​​​​je suis bloqué je réfléchi par le dernier enregistrement mais logiquement 1 et 4 non pas en doublons 

je suis bloqué :(

2 réponses

  1. jee pee Messages postés 31885 Date d'inscription   Statut Modérateur Dernière intervention   9 980
     

    Bonjour,

    Un doublon s'analyse sur les informations qui sont des composants d'une clé, quels sont-ils pour cette table ?


    0
  2. jee pee Messages postés 31885 Date d'inscription   Statut Modérateur Dernière intervention   9 980
     

    Supposons la table

        col1   col2  col3    col4    col5  col6          col7   
        non    200   alain   alian   A100  2022/01/01    2022/05/05
        non    500   alain   alian   NULL  2023/01/01    2023/09/15
        non    600   alain   alian   NULL  2025/01/01    2025/10/28
        OUI    200   alain   alian   A100  2022/01/01    2022/09/09

    et que la notion de doublon soit sur col2 (id), col6 (date début) et que le critère pour déterminer le doublon à conserver soit col7 (date fin), en conservant le plus grand. On pourrait appliquer le code sql suivant pour supprimer le 1er enregistrement.

    delete from table where
        (col2,col6,col7) in
        (
            (
             select col2,col6,col7 from table where
             (col2,col6) in
                (
                 select col2,col6 from table
                    group by col2,col6 having count(*) > 1
                )
            )
            minus
            (
            select col2,col6,max(col7) from table
                    group by col2,col6 having count(*) > 1
            )
        )

    0