MySQL og dato, part II

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
Dette innlegget ble publisert i Programmering med stikkord . Bokmerk permalenken.

Legg igjen et svar

Din e-post vil ikke bli publisert. Obligatoriske felt er merket med *

*

Du kan bruke disse HTML-kodene og -egenskapene: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>