Obtenir une valeur en soustrayant les deux dernières valeurs

Un problème avec votre base de données MySQL, PostgreSQL ou autres.

Modérateurs : jturlier, Météo Villarzel

Javier
Messages : 263
Enregistré le : 15 févr. 2014, 09:23
Localisation : San Sebastián, España
Contact :

Obtenir une valeur en soustrayant les deux dernières valeurs

Message par Javier » 27 août 2022, 11:49

Bonjour à tous

J'écris ce message pour demander de l'aide.
C'est incroyable pour moi que je ne puisse pas le réparer moi-même.
Il s'agit des éléments suivants :

J'utilise le magnifique build NOAAsql :
http://kocher.es/NOAAsql/NOAA.php

Tout fonctionne parfaitement; eh bien, la table "noaa_jour" a un champ appelé "duree_jour_minutes".

Objectif:
Obtenir une valeur en soustrayant du dernier enregistrement du champ « duréee_jour_minutes », l'avant-dernière valeur de ce même champ.

J'ai juste tourné en rond sans trouver la solution

Je soupçonne que vous devez avoir une solution simple
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
Image

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par jturlier » 01 sept. 2022, 09:17

Bonjour Javier,
que penses-tu de ça ?
select amj,( a.duree_jour_minutes -(select b.duree_jour_minutes from noaa_jour b where b.tstamp= (a.tstamp-86400) )) delta from noaa_jour a order by 1 desc;
Tu peux aussi, à partir de cette requête créer une VIEW.
Bien amicalement
Jean
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

Javier
Messages : 263
Enregistré le : 15 févr. 2014, 09:23
Localisation : San Sebastián, España
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par Javier » 01 sept. 2022, 09:38

Bonjour jean

Merci beaucoup pour votre réponse et pour votre suggestion.
J'ai essayé votre "Select", dont le résultat fournit une liste de valeurs de toute la table.
Ladite liste commence le 11 juillet 2022 :

20200711 -2
20200710 -3
20200709 -3
20200708 -2
20200707 -2
20200706 -2
--------------------
et comprend l'ensemble du table.

Ce dont j'ai besoin est une valeur unique (mesurée en secondes) de la différence dans le champ "duréee_jour_minutes" du jour en cours par rapport au jour précédent.
Le but est de remplacer le "script":

http://kocher.es/weatherdisplay/duracion_dia_modif.php

qui a cessé de fonctionner correctement.

Merci beaucoup pour votre soutient


Javier
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
Image

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par jturlier » 01 sept. 2022, 10:39

Re-bonjour Javier,
étant donné que les valeurs dans le champ durée-jour_minutes sont en minutes tu ne peux pas espérer obtenir des secondes en résultat à moins de multiplier par 60 !
Il faut donc que tu envisages d'utiliser autre chose pour résoudre ton problème si tu veux le résultat en secondes !
Là je n'ai pas de solution !!!

Javier
Messages : 263
Enregistré le : 15 févr. 2014, 09:23
Localisation : San Sebastián, España
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par Javier » 01 sept. 2022, 12:47

Merci beaucoup Jean

il faudra penser à autre chose :D
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
Image

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par PascalWMR » 03 sept. 2022, 16:06

Bonjour à tous

La solution de Jean est bonne, il suffit de multiplier le delta par 60 et de limiter le nombre d'enregistrement comme ceci

Code : Tout sélectionner

select amj,( a.duree_jour_minutes -(select b.duree_jour_minutes from noaa_jour b where b.tstamp= (a.tstamp-86400) ))*60 delta from noaa_jour a order by 1 desc LIMIT 1;
On a alors la différence de temps entre la durée du jour et celle du jours précédent en secondes :?: :?: :?:
A moins que ça ne soit pas cela que tu recherche Javier

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par PascalWMR » 03 sept. 2022, 16:22

Re
Javier a écrit :
01 sept. 2022, 09:38

Ce dont j'ai besoin est une valeur unique (mesurée en secondes) de la différence dans le champ "duréee_jour_minutes" du jour en cours par rapport au jour précédent.
Le but est de remplacer le "script":

http://kocher.es/weatherdisplay/duracion_dia_modif.php

qui a cessé de fonctionner correctement.
Au fait Javier, pourquoi le script à arrêté de fonctionner correctement?
N'utiliserait-il pas la fonction strftime() et ton site ne serait-il pas passé à PHP 8.1 ???

Auquel cas, strftime est devenu obsolète et n'est plus interprété. Il provoque même en erreur.
A la place, il faut utiliser la fonction IntlDateFormatter

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Javier
Messages : 263
Enregistré le : 15 févr. 2014, 09:23
Localisation : San Sebastián, España
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par Javier » 03 sept. 2022, 20:18

Salut Pascal

Merci pour votre intérêt (comme toujours) et pour votre commentaire.

Vous pouvez voir le code de la "page" à cette adresse :

https://kocher.es/weatherdisplay/duraci ... p?sce=view






Javier
Modifié en dernier par Javier le 11 sept. 2022, 05:49, modifié 1 fois.
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
Image

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par PascalWMR » 04 sept. 2022, 15:13

Bonjour et bonjour Javier

Ton serveur tourne avec PHP 5.6.11 donc il ne devrait pas y avoir de problèmes de compatibilité.

Par contre, la variable $changeinday n'est définie nulle part sauf dans testtags.php ou effectivement elle a la valeur -00:00:01. C'est conforme à ce qui s'affiche -(0 Min 01 Seg)

J'ai essayé de debugger le script mais c'est compliqué car
  • je n'utilise pas Weather Display
  • il me manque les fichiers Settings.php et common.php
  • et le scripts doit être complètement réécrit car il utilise des fonctions obsolètes comme date_sunrise, date_sunset, strtotime(), strftime() qui ne fonctionnent plus sous PHP 8.1 que j'utilise.
  • la ligne 191 du script est buggée

    Code : Tout sélectionner

    $now  = mktime();
    le format de mktime est mktime(hour, minute, second, month, day, year)
Désolé de ne pouvoir faire plus

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Javier
Messages : 263
Enregistré le : 15 févr. 2014, 09:23
Localisation : San Sebastián, España
Contact :

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Message par Javier » 05 sept. 2022, 08:10

bonjour Pascale

Comme on dit en Espagne : "Has dado en el clavo" :D

C'était exactement le problème:
Le chiffre de variation de la durée du jour est obtenu à partir du logiciel "WeatherDisplay" via le fichier "testtags.php".
Pour une raison inconnue, ledit logiciel (que je mets habituellement à jour) avait perdu les données de latitude et de longitude de ma position.
Dès que j'ai réussi à mettre à jour ces valeurs, la durée du jour (je pense) est correcte.

http://kocher.es/weatherdisplay/duracion_dia_modif.php

A aucun moment je n'ai pensé à cette complication ; Sans votre aide, je doute que je l'aurais réparé.

Merci beaucoup pour votre aide et votre sagacité, ami Pascal
Davis Vantage Pro2 +, Windows 10, Windows 7 (64), Graphweather 3.0.15, Weatherlink 6.0.3, template Pierre-André, template Jachym
Image

Répondre