Kalenderen vår er ikke lett å forholde seg til programatisk.
Heldigvis finnes det gode funksjoner innebygget i de fleste utviklingsspråk for å jobbe med datoer.
I prosjektet med [link] dataloggeren for strømforbruket mitt [/link] så lagrer jeg en ny rad i en MySQL tabell en gang i minuttet. Når jeg så skal hente ut grafer så vil dette bli for mange rader, som igjen vil bety for mange datapunkter i grafen. Vi trenger derfor tilføre litt logikk inn i queryen.
Mysql har flere funksjoner man kan bruke i queryen.
f.eks
SELECT avg( watts ) AS watts, day(time) as tid FROM 14418_usage WHERE time < DATE_SUB( NOW( ) , INTERVAL 7 DAY ) GROUP BY tid order by tid
Dette vil returne gjennomsnitts verdien av feltet 'watts' gruppert og sortert med en verdi pr dag, de siste 7 dager.
MySQL har en del dato funksjoner , i eksemplet over har jeg brukt day(feltnavn), som da vil returnere dagen ut fra et date eller datetime felt. Om feltet inneholder 2010-01-02 20:00:00 så vil da resultatet bli 02.
Her vil gjennomsnittet bli et desimaltall (float), for å kutte ut desimalene må vi legge til dette
CAST(verdi as DATATYPE)
f.eks slik CAST( avg( watts ) AS signed ) som da vil gjøre om verdien til en signed int.
Queryen blir da slik:
SELECT CAST( avg( watts ) AS signed ) AS watts, day(time) as tid FROM 14418_usage WHERE time < DATE_SUB( NOW( ) , INTERVAL 7 DAY ) GROUP BY tid order by tid
