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

