SQL server -doublons

Fermé
saad_7013 Messages postés 1 Date d'inscription mardi 27 septembre 2022 Statut Membre Dernière intervention 27 septembre 2022 - 27 sept. 2022 à 21:19
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 - 28 sept. 2022 à 11:56

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é :(

A voir également:

2 réponses

jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 234
28 sept. 2022 à 11:33

Bonjour,

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


0
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 234
Modifié le 28 sept. 2022 à 11:58

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