[RESOLU] Requête SQLite pour supprimer les doublons

Posez ici vos questions d'utilisation, de configuration de Domoticz, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramètrage Concernant le Raspberry ou les scripts de toute nature des forums spécifiques sont ouverts
Répondre
Honrap
Messages : 39
Enregistré le : 01 nov. 2017, 21:11

[RESOLU] Requête SQLite pour supprimer les doublons

Message par Honrap » 21 avr. 2018, 14:32

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.
Modifié en dernier par Honrap le 28 avr. 2018, 19:16, modifié 5 fois.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


vil1driver
Messages : 4615
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Doublons dans les mesures

Message par vil1driver » 21 avr. 2018, 17:36

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.

Domoticz v4.10078 (ubuntu server) OpenZwave v1.4-3000 (zwave+ sigma designs) rfxtrx433 fw1015T1

433mhz : thgn800, ms13e2, phenix, Di.O, zk1pa, creasol sender
868mhz : fgms-001, fgfs-101, dsd37-zweu, ZW098


modules.lua

Honrap
Messages : 39
Enregistré le : 01 nov. 2017, 21:11

Re: Doublons dans les mesures

Message par Honrap » 21 avr. 2018, 17:48

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

Honrap
Messages : 39
Enregistré le : 01 nov. 2017, 21:11

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

Message par Honrap » 23 avr. 2018, 23:44

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.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre