Tricky Group by, men hvordan - KÆMPE udfordring
Der er godt nok dømt streetrespect hvis du kan hjælpe med at greje denne udfordringHej, jeg har en tabel hvor jeg har et tidsstempel i datetime format i feltet A og en talværdi i feltet B og en brugerid i feltet C
hvert tidsinterval er med 15 min mellemrum
nu vil jeg gerne kunne søge på en datetime i et specifik mellemrum, have returneret et gennemsnit i forskellige af værdierne i mit værdi felt B
Nu vil jeg gerne kunne returnere en liste af gennemsnitsværdier pr time, pr dag, pr uge, pr md, pr år indenfor det givne interval bare en af gangen, altså eksempelvis pr dag
(her er jeg forlængst gået død på syntaxen, og om det overhovedet er muligt)
Det næste ønske, er hvis jeg jeg søger efter gennemsnitsværdier pr time, så vil jeg have 12 timer fra starttidspunktet.
Hvis jeg søger efter dage, vil jeg have gennemsnit per dag i 7 dage fra starttidspunkt
hvis jeg søger efter uger vil jeg returnere gennemsnitsværdier for 13 uger fra starttid
hvis jeg søger på måneder vil jeg returnere gennemsnitsværdier for 12 mdr fra starttid
Hvis jeg søger på år, vil jeg have så have noget lidt specielt... nemlig gennemsnits værdier for 3 mdr af gangen 3år fra starttid
Det sidste ønske, som dog ikke er streng nødvendigt, er at jeg kan lave ovenstående søgninger men på X antal brugere af gangen, dvs eksempelvis bruger1 og bruger2, og så gruppere disse som det første....
Lidt pseuodo kode kunne være noget ala:
jeg har php 4.2.2 og mysql 4.0.17
$start="2003-05-29 12:00:00";
Select A,AVG(B),C from mytable where A>='$start' AND A<='$start+(12 hours)' group by uid,hour(A)
eller
Select A,AVG(B),C from mytable where A>='$start' AND A<='$start+(13 weeks)' group by uid,week(A)
eller
Select A,AVG(B),C from where mytable A>='$start' AND A<='$start+(12 months)' group by uid,month(A)
eller
Select A,AVG(B),C from mytable where A>='$start' AND A<='$start+(3 years)' group by uid,month(A+(A+1))
