banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#1 Fri 23 July 2021 16:44

BALDE
Participant occasionnel
Date d'inscription: 31 Oct 2020
Messages: 11

Suppression de lignes en double

Bonjour,

Dans ma table d'entrĂ©e (historique des modifications du bĂąti d'OSM), j'ai des versions de modification en double (cf. champ "vway"). Par exemple pour l'entitĂ© 36705332, j'ai beaucoup de valeurs (3, 4, 5, 6 ...) qui apparaissent plus de deux fois dans la table pour un mĂȘme objet.
Pour supprimer les lignes dont les versions (vway) sont doublĂ©es pour le mĂȘme objet, J'ai créé la requĂȘte SQL ci-dessous.

Code:

DELETE FROM tabtest
WHERE id IN (
    SELECT
        osm_id
    FROM (
        SELECT
            osm_id,
            row_number() OVER w as rnum
        FROM tabtest
        WINDOW w AS (
            PARTITION BY osm_id
            ORDER BY osm_id
        )

    ) t
WHERE t.rnum > 1);

Cependant, cette requĂȘte supprime toutes les entitĂ©s de ma table or mon idĂ©e c'est de garder une version diffĂ©rente par objet.
Je souhaiterais savoir si quelqu'un a eu à faire ce type d'opération.
J'ai joint ci-dessous ma table d'entrée.
Merci d'avance


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Fri 23 July 2021 17:46

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 1044

Re: Suppression de lignes en double

Et sinon, plutÎt que de supprimer les doublons, pourquoi ne pas faire un "GROUP BY" pour ne garder qu'une seule entité selon les valeurs doublonnées ? (ça oblige à créer une nouvelle table, mais ce sera plus simple/rapide)


Sylvain M.

Hors ligne

 

#3 Fri 23 July 2021 17:50

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 1044

Re: Suppression de lignes en double

Exemple :

Code:

CREATE TABLE matablesansdoublons AS
SELECT    id,
        geom_hist,
        osm_id,
        STRING_AGG(vway,',') as vways_agg,
        changeset,
        username,
        uid,
        tags,
        composedof,
        date
FROM    tabtest
GROUP BY id,
        geom_hist,
        osm_id,
        changeset,
        username,
        uid,
        tags,
        composedof,
        date;

Edit : j'ai pas bien pigé la nature des doublons, mais tu peux faire le "STRING_AGG()" (ou "ARRAY_AGG()" ) sur d'autres champs potentiellement dupliqués

Edit 2 : et éventuellement le compléter avec un DISTINCT.
Exemple :

Code:

STRING_AGG(DISTINCT vway,',')

Dernière modification par Sylvain M. (Fri 23 July 2021 17:56)


Sylvain M.

Hors ligne

 

#4 Mon 26 July 2021 09:58

BALDE
Participant occasionnel
Date d'inscription: 31 Oct 2020
Messages: 11

Re: Suppression de lignes en double

Parfait !
Merci pour l'assistance

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo