Visualizzare valori medi

  • Creatore Discussione Creatore Discussione ric@66
  • Data di inizio Data di inizio

ric@66

Nuovo Utente
1 Nov 2011
17
0
0
Salve a tutti ,il problema e' il seguente lavoro su piattaforma Mysql all'interno una database ARCHIVIO con una tabella LETTURA composta dalle seguenti colonne
GIORNO ORA IDS TEMPERATURA ecc.ecc.
per tirare fuori un valore medio giornaliero effettuo un SELECT del genere

SELECT AVG(temperatura)
FROM lettura
WHERE giorno=20110519 And ids=1;

come risposta ho il valore medio della colonna temperatura ,del giorno 2011/05/19 per il sensore N°1
ora a me servirebbe visualizzare l'orario di quel record ma non saprei come impostare la query ,
vi ringrazio per l'attenzione.
 
ciao
secondo me stai facendo un errore di logica, non tanto di mysql.
se calcoli la media dell temperature di una colonna non è detto che tale valore corrisponda ad un'ora precisa, anzi molto improbabile.
es.
ore 09 t= 3 °C
ore 10 t= 7 ° C
ore 11 t= 1 ° C
avg(temperatura) = 3.67 °C
ora 3.66 non corrisponde a nessuna ora.
forse ti conviene oltre alla temperatura media calcolare la deviazione standard e da questa l'intervallo, per un dato grado di sicurezza, es +- 1 °C
da cui t media = 3.67 +-1 °C => 2.67 - 4.67 e cercare l'ora (o le ore) che cade nell'intervallo.
 
In effetti ho detto una grandissima cretinata non esiste un ora di inserimento record perche' tale record non esiste
ma e' ricavato ,ma se posso continuare ad abusare della tua gentilezza ti chiedo ,potrei avere il valore minimo giornaliero con ora, il valore max giornaliero con ora e come terzo la media di questi due valori???
se si come formulare la SELECT?
grazie ancora
 
ciao
secondo me devi fare due select

SELECT ORA , MAX(temperatura) FROM lettura GROUP BY ORA WHERE giorno=20110519 AND ids=1
SELECT ORA , MIN(temperatura) FROM lettura GROUP BY ORA WHERE giorno=20110519 AND ids=1

oppure

SELECT * FROM lettura WHERE giorno=20110519 ANDids=1 ORDER BY temperatura DESC LIMIT 1
SELECT * FROM lettura WHERE giorno=20110519 AND ids=1 ORDER BY temperatura ASC LIMIT 1

io preferirei la seconda
PHP:
<?php
$temp=array();
$ora=array();
$query=array('SELECT * FROM lettura  WHERE giorno=20110519 ANDids=1 ORDER BY temperatura DESC LIMIT 1','SELECT * FROM lettura  WHERE giorno=20110519 AND ids=1 ORDER BY temperatura ASC LIMIT 1');
foreach($query as $q){
	$res=mysql_query($q);
	$riga=mysql_fetch=array($res);
	$temp[]=$riga['temperatura'];
	$ora[]=$riga['ORA'];
}
echo "valore medio = ".round((array_sum($temp)/2),2)." °C<br>";//calcola la media tra MAX e min e arrotonda a due cifre decimali 
echo "valore massimo ".$temp[0]." °C alle ore ".$ora[0]."<br>";
echo "valore minimo ".$temp[1]." °C alle ore ".$ora[1]."<br>";
?>
prova e dimmi se funzia
poi se ti serve la media del giorno con l'intervallo di errore sappimi dire (è un problema della teoria degli errori), il tutto dipende dallo scopo di quanto stai facendo
 
ho utilizzato la seconda come da consiglio ,anche perche la prima mi restituisce un errore di sintassi,ed e e' perfetta ,ora posso calcolare il valore medio tra min e max , ma avendo questi due valori su due campi diversi Min Max credo che non possa usare il comando AVG
 
ciao
ciao puoi usare avg, ma non riesci a trovare l'ora.
non so lo scopo per cui fai il tutto, ma se è uno scopo scientifico e/o controllo è una cosa, se a livello hobby un'altra.
es. se a livello hobby: la media tra max e min può essere molto diversa dalla media reale delle temperature della giornata, ma anche se compi un errore ha poca importanza
a livello scientifico e/o di controllo (es. di un processo) l'errore che puoi compiere può avere risultati inaspettati (e spesso non voluti).
dammi maggiori maggiori info, forse posso consigliarti al meglio.
 
Ciao ,per quanto riguarda l orario della temp media e' chiaro che non posso averla ,ti spiego l utilita' di questa cosa io ho dei sensori che mi inviano ogni 15 mimuti dei valori di tmp e umidita' ,questi sesori sono posizionati in stanze con dei libri antichi e quindi vi e' la necessita' di capire l andamemto della temperatura/umidita' in quella determinata stanza ,dal momento che posso avere in una stanza anche 4 sensorii ,immagina che valanga di dati dovrei gestire a fine mese, quindi qui nasce la necessita di dividere giorrnalmente il valore max min per sensore ed abere un valore statistico di temp e umid di media.Forse mi sono dilungato troppo ma spero di aver reso l idea ,un saluto e grazie dell attenzione
 
ciao
dato che amo i libri, in giornata ti invio delle funzioni per ottenere quello che vuoi. devo un momento adattarle alle tue esigenze.
per l'ora della temperatura (o umidità) media è possibile ricavare qualche dato. es t_media dalle hh:mm alle hh:mm (circa), analogamente per gli altri dati.
eventualmente per la spiegazione delle funzioni (non dal punto di vista di php che penso che tu le capisca, ma mat-statistico), dato che può non interessare il forum, mandami tuo indirizzo email che te le faccio avere.
 
ciao
come anticipato ti allego le funzioni che avevo, adattate (spero) alle tue esigenze
le funzioni, bisticcio di parole, funzionano utilizzando degli array, quindi quando prelevi i dati dal db devi metterli proma in un array.
es.
PHP:
//....
$query_str="SELECT * FROM lettura WHERE giorno='20111110' AND ids='1';
$ris=mysql_query($query_str);
//conviene prima definire gli array
$ora=array();
$temp=array();
$umidita=array();
while($riga=mysql_fetch_array($ris)){
	$ora[]=$riga['ORA'];
	$temp[]=$riga['temperatura'];
	$umidita[]=$riga['umidita'];
}
//......
poi guarda e caricati per prova il file che ti allego, penso che leggendo i commenti dovresti capire il funzionamento di ciascuna funzione e, volendo ricavarne altre.
se poi sei bravo con la programmazione a oggetti (io no) puoi trasformarle tutte in una classe
 

Allegati

cavolo sei un grande ,ho dato una letta al discorso grafici ed e' veramente una bella idea poter rapresentare questi valori anche graficamente ,che direda lavorare ce ne' molto,ti ringrazio molto per la pazienza che ci stai mettendo Ciao a presto:fonzie:
 

Discussioni simili