Bonjour,
J'ai trouvé plusieurs sujets pour supprimer des doublons mais les exemples proposés ne fonctionnent pas sur mon cas (je met peut-être des mauvaises valeurs).
Voici ce que j'ai: une table de 12453 lignes, avec 13 colonnes (c'est la table Temperature_Calendar de Domoticz, à priori sur SQLite).
Il y a des doublons de lignes avec plusieurs fois le même couples colonnes 1 (DeviceRowID) et 13 (date).
Avec DB Browser for SQLite, la requête ci-dessous fonctionne pour trouver le nombre de doublons:
Mais je n'arrive pas à trouver une requête pour supprimer les 11038 doublons. Excel arrive à les trouver et à les supprimer quand j'importe Temperature_Calendar en csv, il me reste au final 1415 lignes uniques.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT COUNT(*) AS nbr_doublon, DeviceRowID, date FROM Temperature_Calendar GROUP BY DeviceRowID, date HAVING COUNT(*) > 1 1400 enregistrements ramenés en 11ms depuis : SELECT COUNT(*) AS nbr_doublon, DeviceRowID, date FROM Temperature_Calendar GROUP BY DeviceRowID, date HAVING COUNT(*) > 1
La requête ci-dessous s'exécute bien mais me vide toutes les lignes...
EDIT: j'ai trouvé la solution, dans la bonne section (SQLite): https://www.developpez.net/forums/d9...s/#post5229060
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 delete from Temperature_Calendar where DeviceRowID in ( select T1.DeviceRowID from Temperature_Calendar T1, Temperature_Calendar T2 where T1.DeviceRowID = T2.DeviceRowID and T1.date = T2.date ) Requête exécutée avec succès : delete from Temperature_Calendar where DeviceRowID in ( select T1.DeviceRowID from Temperature_Calendar T1, Temperature_Calendar T2 where T1.DeviceRowID = T2.DeviceRowID and T1.date = T2.date ) (en 145 ms, 12453 enregistrements affectés)
Ca marche ! avec cette requête:
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 DELETE FROM Temperature_Calendar WHERE Temperature_Calendar.rowid > (SELECT rowid FROM Temperature_Calendar T2 WHERE Temperature_Calendar.rowid <> T2.rowid AND Temperature_Calendar.DeviceRowID = T2.DeviceRowID AND Temperature_Calendar.date = T2.date); select 'Doublons absolus apres suppression :'; SELECT COUNT(*) AS NBR_DOUBLES, DeviceRowID, date FROM Temperature_Calendar GROUP BY DeviceRowID, date HAVING COUNT(*) > 1; select 'Lignes :' || count(*) from Temperature_Calendar;
Partager