Din forespørgsel er ikke-deterministisk, så det er ikke overraskende, at du får uventede resultater. Med dette mener jeg, at du kunne køre denne forespørgsel på de samme data 5 gange og få 5 forskellige resultatsæt. Dette skyldes, at du vælger DATE(timestamp)
men gruppering efter WEEK(DATE(startdate))
, forespørgslen returnerer derfor tidspunktet for den første række, den støder på pr. startdatouge i ANY bestille.
Overvej følgende 2 rækker (med tidsstempel i datoformat for nem læsning):
TimeStamp StartDate
20120601 20120601
20120701 20120601
Din forespørgsel grupperes efter WEEK(StartDate)
hvilket er 23, da begge rækker evalueres til den samme værdi, ville du forvente, at dine resultater har 1 række med et antal på 2.
DOG DATE(timestamp)
Er også på udvalgslisten og da der ikke er nogen ORDER BY
sætning forespørgslen har ingen idé om, hvilket tidsstempel der skal returnere '20120601' eller '20120701'. Så selv på dette lille resultatsæt har du en 50:50 chance for at få:
TimeStamp COUNT
20120601 2
og en 50:50 chance for at få
TimeStamp COUNT
20120701 2
Hvis du tilføjer flere data til datasættet som sådan:
TimeStamp StartDate
20120601 20120601
20120701 20120601
20120701 20120701
Du kunne få
TimeStamp COUNT
20120601 2
20120701 1
eller
TimeStamp COUNT
20120701 2
20120701 1
Du kan se, hvordan du med 37.000.000 rækker snart vil få resultater, som du ikke forventer og ikke kan forudsige!
REDIGER
Da det ser ud til, at du forsøger at få ugestart i dine resultater, mens du gruppe for uge kan bruge følgende til at få ugestart (erstat CURRENT_TIMESTAMP med den kolonne, du ønsker):
SELECT DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart
Du kan derefter gruppere inden for denne dato også for at få ugentlige resultater og undgå besværet med at have ting på din udvalgte liste, som ikke er i din gruppe inden.