Selection de champs non vides

- - Dernière réponse : bubbledesavon
Messages postés
66
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
6 mars 2015
- 25 nov. 2014 à 17:45
Bonjour,
voila mon souci,
j'ai une table A, qui contient 23 colonnes DATE,A1,A2,A3....
c'est une base de donnee qui vient d'un automate,donc des qu'une valeur change sur l'automate ,l'automate envoie l'ecriture de la valeur.
ex:id=1 date=17/11/2014 09:45:13 A1=vide A2=vide A3=4 A5=vide.....A22=vide
id=2 date=17/11/2014 09:45:23 A1=0.23 A2=vide A3=vide ....A22=vide.
id=3 ....

ensuite avec cette base je cree un graphique avec un "SELECT * FROM A WHERE date entre xx et xxx"
suite a cette requete je cree un JSON
cela fonctionne, sauf que mon graphique ressemble a une scie
ex: bonne valeur - zero - zero - bonne valeur -zero....

j'aimerais savoir si il y a une solution pour choisir uniquement la valeur non vide de chaque ligne par rapport a la date?

je ne sait pas si j'ai ete clair , mais je reste a votre dispo pour plus d'infos.

cordialement
Afficher la suite 

4 réponses

Messages postés
26979
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 décembre 2019
318
0
Merci
Bonjour,

Je pense que ce traitement doit être fait dans ton code et non dans ta requête.
C'est à dire : Tu fais ta requête... tu reçois toutes les données... tu les retravailles AVANT de faire ton graph en excluant les colonnes vides.

Mais ... à quoi correspondent tes différentes colonnes A1 ..A2 ..A3 ...

J'ai l'impression que ta BDD est mal conçue.... et que tes A1 A2.. sont en fait le même champ mais que tu te décalles dans tes colonnes pour garder un historique...Et dans ce cas..N'aurais tu pas mieux fais de faire :
Une table ELEMENT ( id_elm,date_elm)
Une table ITEMS (id_item, id_elm,_val_item)



Commenter la réponse de jordane45
0
Merci
c'est un automate qui envie A1=tension de la batterie,A2=tension capteur ,A3=puissance pince,A4=temperature tapis.....

et il envoie une trame a peu pres comme ceux ci :
""-""-""-4-""-""-""-""-""-""-""
""-""-""-""-""-""-""-25.3-""-""-""
........
moi je rajout la date avant de l'nevoyer dans la table.

effectivement je vais essayer avec deux tables et je vous tiens au courant.

cordialement
jordane45
Messages postés
26979
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 décembre 2019
318 -
Avec une seule table c'est jouable...
Mais de la forme :

Une table MESURE(id_mesure, libelle,valeur,date_mesure)
libelle* correspondant au "nom du champ" ( ce qui équivaut à tes A1..A2..A3..)

Et donc par la suite, ta requête pourrait ressembler à quelque chose du genre :

SELECT * FROM A 
WHERE date entre xx et xxx
AND valeur <>''


Ce qui te retournera un tableau de la forme:

1 A1 4 2014-11-17 09:45:00
2 A2 25,43 2014-11-17 09:45:23
...


A toi ensuite de "travailler" ton tableau pour créer ton graphique
Commenter la réponse de bubbledesavon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
0
Merci
Salut,

Tu peux utiliser ce type de requête (fonctionne sous Firebird, à adapter éventuellement en fonction de ton SGBD). C'est un exemple en prenant une table avec 5 colonnes (DATE_EVENT, A1, A2, A3, A4).
L'inconvénient, c'est que tu ne sais pas quel "A" est renvoyé...

Select distinct DATE_EVENT,
(CASE
WHEN A1 is NULL then
CASE
When A2 is NULL then
CASE
When A3 is NULL then A4 /* et sinon on continue avec A5, A6... */
ELSE A3
END
ELSE A2
END
ELSE A1
END) AS A_Result
FROM A


Simon
jordane45
Messages postés
26979
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 décembre 2019
318 -
Le souci c'est qu'il a : 23 colonnes ....
Ce qui implique de coder autant de WHEN ...
Sans parler du fait que si un jour il veut ajouter une colonne il devra ajouter encore un case when...
Bref.. le souci... au départ.. se trouve dans la conception de sa BDD;
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 -
Certes... :)
Commenter la réponse de sp40
Messages postés
66
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
6 mars 2015
0
Merci
bonjour,

effectivement , j'ai retravaillé la base de donnee

date-evenement-valeur

j'ai un peu galeré avec le graphique , mais maintenant tout fonctionne.

merci de votre interet et de vos reponses.
Commenter la réponse de bubbledesavon