[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
Honrap
Messages : 20
Inscription : 01 nov. 2017, 21:11

[RESOLU] Requête SQLite pour supprimer les doublons

Messagepar Honrap » 21 avr. 2018, 14:32

EDIT: la solution est ici un peu plus bas.

Bonjour,

Suite au passage en version beta (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.
Dernière édition par Honrap le 28 avr. 2018, 19:16, édité 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 : 4350
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Doublons dans les mesures

Messagepar 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 v3.9203 (ubuntu server) OpenZwave v1.4-3000 (zwave+ sigma designs) mysensors v1.5 (serial gateway) rfxtrx433 fw1015T1

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

modules.lua

Honrap
Messages : 20
Inscription : 01 nov. 2017, 21:11

Re: Doublons dans les mesures

Messagepar 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 : 20
Inscription : 01 nov. 2017, 21:11

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

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



Revenir vers « Domoticz : Question et réponses »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités