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

La requête ci-dessous s'exécute bien mais me vide toutes les lignes...
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)
EDIT: j'ai trouvé la solution, dans la bonne section (SQLite): https://www.developpez.net/forums/d9...s/#post5229060

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;