Voor een systeem waar ik mee aan het stoeien ben, heb ik een database opgezet waarin gelogd wordt hoeveel energie er opgewekt is door de zonnepanelen. Elke 5 min loggen de systemen naar een tabel en schrijven daar hun (tot op dat moment van de dag) hoeveelheid opgewekte energie op. Aan het begin van de dag is dat 0, aan het einde dus de op die dag hoeveelheid opgewekte energie.
Stel om 17:02 was energy 1500, om 17:59 was dat 2000 dan is de opwekking van 17uur 500.
De tabel ziet er als volgt uit:
id | id_system | time (datetime) | energy
Zoals gezegd loopt de hoeveelheid energie gedurende de dag op. Nu wil ik graag per uur inzichtelijk maken hoeveel er op gewekt is. Om voor een systeem (id_system =1) de hoeveelheid opgewekt energie te bereken, gebruik ik de volgende query;
Dus van een bepaald uur, pak ik de maximale hoeveelheid energie (dus aan het einde van dat uur) minus de minimale hoeveelheid energie (dus aan het begin van het uur) om te berekenen hoeveel energie er gedurende die tijdsspanne van 1 uur is opgewekt. (hourly_energy)
Nu wil ik ook graag een bepalen hoeveel alle systemen samen op hebben gewekt, maar ik weet eerlijk gezegd even niet hoe ik dat moet aanpakken.
Ik kan natuurlijk via php voor elk id_system de query elke keer gaan uitvoeren (op dit moment 7 keer). Maar het lijkt mij dat dit ook met 1 query moet kunnen vanuit MySQL.
Het weglaten van 'AND id_system = 1' wil niet, want dan pakt hij de hoogst gelogde hoeveelheid energie van een bepaald systeem en trekt daar het minste van (een ander systeem) weer vanaf.
De query moet dus een SUM() gaan doen, voor elke id_system in de database en de totale opwekking per interval van 1 uur berekenen.
Kortom, ik ben even de weg kwijt en heb een schop(je) in de juist richting nodig.
Stel om 17:02 was energy 1500, om 17:59 was dat 2000 dan is de opwekking van 17uur 500.
De tabel ziet er als volgt uit:
id | id_system | time (datetime) | energy
Zoals gezegd loopt de hoeveelheid energie gedurende de dag op. Nu wil ik graag per uur inzichtelijk maken hoeveel er op gewekt is. Om voor een systeem (id_system =1) de hoeveelheid opgewekt energie te bereken, gebruik ik de volgende query;
MySQL:
1
2
3
4
5
6
7
| select time, (max(energy) - min(energy)) as hourly_energy from data_running_summed where date(`time`) = "2013-05-23" and id_system = 1 group by hour(time) order by `time` |
Dus van een bepaald uur, pak ik de maximale hoeveelheid energie (dus aan het einde van dat uur) minus de minimale hoeveelheid energie (dus aan het begin van het uur) om te berekenen hoeveel energie er gedurende die tijdsspanne van 1 uur is opgewekt. (hourly_energy)
Nu wil ik ook graag een bepalen hoeveel alle systemen samen op hebben gewekt, maar ik weet eerlijk gezegd even niet hoe ik dat moet aanpakken.
Ik kan natuurlijk via php voor elk id_system de query elke keer gaan uitvoeren (op dit moment 7 keer). Maar het lijkt mij dat dit ook met 1 query moet kunnen vanuit MySQL.
Het weglaten van 'AND id_system = 1' wil niet, want dan pakt hij de hoogst gelogde hoeveelheid energie van een bepaald systeem en trekt daar het minste van (een ander systeem) weer vanaf.
De query moet dus een SUM() gaan doen, voor elke id_system in de database en de totale opwekking per interval van 1 uur berekenen.
Kortom, ik ben even de weg kwijt en heb een schop(je) in de juist richting nodig.