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