Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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: 981

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: 981

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

Powered by FluxBB