Ciao,
ho questo codice SQL che va a prendere i campionamenti, di una serie di stazioni di monitoraggio, estrapola tutti i valori delle rilevazioni di un certo sensore (DataOffset = 6), calcolando il valore massimo per ogni mese nel priodo di tempo specificato.
Vorrei modificarla in modo da ritornare, al posto di ogni MAX(valore) mensile, la differenza tra il MAX() mensile e il MAX() del mese precedente.codice:SELECT h.`samplingdate`, MAX(r.`value`) FROM `results` r JOIN `headers` h ON r.`headerid` = h.`id` JOIN `channels` c ON c.`ChannelID` = r.`ChannelID` WHERE h.`samplingdate` >= '2011-01-01 00:00:00' AND h.`samplingdate` <= '2011-08-29 00:00:00' AND c.`StationID` = 'IMPIANTO' AND c.`DataOffset` = 6 /* AND r.`channelid` = '$channel_id' */ GROUP BY Year(h.`samplingdate`), Month(h.`samplingdate`) ORDER BY h.`samplingdate`
Ho provato a scrivere qualcosa ma non riesco a capire come fare
Ma mi pare un pò caotica, ed ovviamente non funzionante....codice:SELECT h.`samplingdate` as CurrentSampling, ( MAX(r.`value`) - ( SELECT Month(h.`samplingdate`) as Previous_Sampling, MAX(r.`value`) FROM `headers` h JOIN `headers` h ON r.`headerid` = h.`id` JOIN `channels` c ON c.`ChannelID` = r.`ChannelID` WHERE Year(h.`samplingdate`) AND Month(h.`samplingdate`) = Month(CurrentSampling)-1 AND c.`StationID` = 'IMPIANTO' AND c.`DataOffset` = 6 ) ) as Previous_MAX FROM `results` r JOIN `headers` h ON r.`headerid` = h.`id` JOIN `channels` c ON c.`ChannelID` = r.`ChannelID` WHERE h.`samplingdate` >= '2011-01-01 00:00:00' AND h.`samplingdate` <= '2011-08-29 00:00:00' AND c.`StationID` = 'IMPIANTO' AND c.`DataOffset` = 6 /* AND r.`channelid` = '$channel_id' */ GROUP BY Year(h.`samplingdate`), Month(h.`samplingdate`) ORDER BY h.`samplingdate`
Sapete dirmi come fare?![]()

Rispondi quotando