Page 1 sur 1

[RESOLU] Requête SQLite pour supprimer les doublons

Publié : 21 avr. 2018, 14:32
par Honrap
EDIT: la solution est ici un peu plus bas.

Bonjour,

Suite au passage en version beta (https://easydomoticz.com/forum/viewtopic.php?f=8&t=5773), et des bug d'affichages, j'ai tenté un retour en version stable ( ./updaterelease , et aussi via sudo curl -L install.domoticz.com | bash ). Ca fini par repartir mais je viens de voir que j'ai de nombreux doublons dans les mesures.
J'ai pas de message d'alerte dans la log.

Y a moyen de les supprimer par une commande ? (sans restaurer...)

Exemple:
Image

EDIT:
Je viens d'ouvrir la base domoticz.db avec DB Browser for SQLite et dans la table Tempetature_Calendar, je vois bien les doublons.

Re: Doublons dans les mesures

Publié : 21 avr. 2018, 17:36
par vil1driver
Salut,

Il faut eviter de faire marche arrière dans les versions en gardant la même base.
Base qui peu subir des modifications de structure non réversibles.
Avant de passer en bêta: faire un backup de la base
si retour en stable, recharger la base précédemment sauvée.

Re: Doublons dans les mesures

Publié : 21 avr. 2018, 17:48
par Honrap
Merci pour ta réponse vol1driver. C'est sûr que c'est pas génial de faire un retour arrière.

Je pense que je peux faire le ménage dans les doublons. J'arrive à les afficher avec cette commande:

Code : Tout sélectionner

SELECT COUNT(*) AS nbr_doublon, DeviceRowID, date
FROM Temperature_Calendar
GROUP BY DeviceRowID, date
HAVING COUNT(*) > 1
Résultat:

Code : Tout sélectionner

1400 enregistrements ramenés en 8ms depuis : SELECT COUNT(*) AS nbr_doublon, DeviceRowID, date
FROM Temperature_Calendar
GROUP BY DeviceRowID, date
HAVING COUNT(*) > 1
Je cherche maintenant la requête pour supprimer les lignes...

Re: [RESOLU] Requête SQLite pour supprimer les doublons

Publié : 23 avr. 2018, 23:44
par Honrap
Voici la solution:

Méthode:
1) Arrêter domoticz

Code : Tout sélectionner

sudo service domoticz.sh stop
2) Faire une copie de la base de données (impératif pour retour arrière si problème):

Code : Tout sélectionner

sudo cp /home/pi/domoticz/domoticz.db /home/pi/domoticz/domoticz.old.db
3) Transférer domoticz.db du raspberry vers le PC avec WinSCP
4) Ouvrir domoticz.db avec DB Browser for SQLite.
5) Dans "Exécuter le SQL", entrer le code suivant pour vérifier s'il y a des doublons (plusieurs dates identiques pour le même DeviceID):

Code : Tout sélectionner

SELECT COUNT(*) AS nbr_doublon, DeviceRowID, date
FROM Temperature_Calendar
GROUP BY DeviceRowID, date
HAVING COUNT(*) > 1
6) S'il y a des doublons, alors dans "Exécuter le SQL", remplacer tout le texte par la requête suivante, et l'exécuter:

Code : Tout sélectionner

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;
7) Sauvegarder la base modifiée: Fichier/Enregistrer les modifications"
8) Transférer domoticz.db du PC vers le Raspberry à l'endroit initial.
9) Sur le raspberry, réappliquer les droits pour être sûr:

Code : Tout sélectionner

sudo chown pi.pi domoticz.db
10) Et enfin, relancer Domoticz:

Code : Tout sélectionner

sudo service domoticz.sh start
Un exemple général et l'explication de la requête sont sur www.developpez.net.

Pour supprimer les doublons dans la table des préférences, voir ici.