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

Administration Oracle Discussion :

Suppression points doublons


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut Suppression points doublons
    Bonjour
    J'ai dans une table oracle plusieurs doublons avec le time stamp mais à chaque fois les valeurs sont differentes.
    Exemple :
    time stamp V1 V2
    10/05/06 11:00 A 3
    10/05/06 12:00 A 3 OK
    10/05/06 12:00 C 4 x
    10/05/06 15:00 C 4
    1 question :Comment peut on supprimer une Ligne ? garder la premiere OK
    Avec DISTINCT cela n'est pas possible car la ligne n'est pas identique.
    merci

  2. #2
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Salut,

    La pseudo-colonne ROWNUM devrait pouvoir t'aider à te tirer d'affaire, cf la FAQ :
    - Comment détecter et supprimer les doublons ?
    - Comment sélectionner du m-iéme au n-iéme enregistrements ?
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    ben tu identifies tes lignes à garder comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT
    timestamp, COUNT(1), MIN(V1)
    FROM MATABLE
    GROUP BY timestamp
    HAVING COUNT(1)>1
    Ca va te ramener les lignes que tu veux garder. Et ensuite tu supprimes toutes les lignes qui ont le même timestamp que celui que tu veux garder mais dont V1 est <> MIN(V1). Je verrais éventuellement un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DELETE
    FROM TEST T1
    WHERE
    EXISTS
    (
    SELECT
    1
    FROM TEST T2
    WHERE
    T1.time_stamp=T2.time_stamp
    AND T1.V1<>(SELECT MIN(V1) FROM TEST T3 WHERE T3.time_stamp=T2.time_stamp)
    );
    Et voila le truc en action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    SQL> CREATE TABLE TEST(time_stamp DATE, V1 VARCHAR2(1));
     
    Table créée.
     
    SQL>
    SQL> INSERT INTO TEST VALUES('01/01/2006','A');
    1 ligne créée.
     
    SQL> INSERT INTO TEST VALUES('02/01/2006','A');
    1 ligne créée.
     
    SQL> INSERT INTO TEST VALUES('02/01/2006','C');
    1 ligne créée.
     
    SQL> INSERT INTO TEST VALUES('03/01/2006','C');
    1 ligne créée.
     
    SQL>
    SQL> SELECT * FROM TEST;
     
    TIME_STA V
    -------- -
    01/01/06 A
    02/01/06 A
    02/01/06 C
    03/01/06 C
     
    SQL>
    SQL> SELECT *
      2  FROM TEST T1
      3  WHERE
      4  EXISTS
      5  (
      6  SELECT
      7  1
      8  FROM TEST T2
      9  WHERE
     10  T1.time_stamp=T2.time_stamp
     11  AND T1.V1<>(SELECT MIN(V1) FROM TEST T3 WHERE T3.time_stamp=T2.time_stamp)
     12  );
     
    TIME_STA V
    -------- -
    02/01/06 C
     
    SQL>
    SQL> DELETE
      2  FROM TEST T1
      3  WHERE
      4  EXISTS
      5  (
      6  SELECT
      7  1
      8  FROM TEST T2
      9  WHERE
     10  T1.time_stamp=T2.time_stamp
     11  AND T1.V1<>(SELECT MIN(V1) FROM TEST T3 WHERE T3.time_stamp=T2.time_stamp)
     12  );
    1 ligne supprimée.
     
    SQL>
    SQL> SELECT * FROM TEST;
     
    TIME_STA V
    -------- -
    01/01/06 A
    02/01/06 A
    03/01/06 C

Discussions similaires

  1. Suppression de doublons et insertion
    Par Samish dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/08/2005, 21h57
  2. Réponses: 17
    Dernier message: 03/12/2004, 11h17
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 14h08
  4. Requête de suppression de doublons : besoin d'aide
    Par biocorp dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2004, 17h04
  5. [LG]Suppression de doublons
    Par moustique31 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2003, 21h03

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