Din fråga är icke-deterministisk så det är inte förvånande att du får oväntade resultat. Med detta menar jag att du kan köra den här frågan på samma data 5 gånger och få 5 olika resultatuppsättningar. Detta beror på att du väljer DATE(timestamp)
men gruppering efter WEEK(DATE(startdate))
, frågan returnerar därför tiden för den första raden den stöter på per startdatumvecka i ANY beställa.
Tänk på följande 2 rader (med tidsstämpel i datumformat för enkel läsning):
TimeStamp StartDate
20120601 20120601
20120701 20120601
Din fråga grupperas efter WEEK(StartDate)
vilket är 23, eftersom båda raderna utvärderas till samma värde skulle du förvänta dig att dina resultat skulle ha 1 rad med ett antal 2.
MEN DATE(Timestamp)
Finns också i urvalslistan och eftersom det inte finns någon ORDER BY
satsen frågan har ingen aning om vilken tidsstämpel som ska returnera '20120601' eller '20120701'. Så även på denna lilla resultatuppsättning har du en 50:50 chans att få:
TimeStamp COUNT
20120601 2
och en 50:50 chans att få
TimeStamp COUNT
20120701 2
Om du lägger till mer data till datamängden som så:
TimeStamp StartDate
20120601 20120601
20120701 20120601
20120701 20120701
Du kan få
TimeStamp COUNT
20120601 2
20120701 1
eller
TimeStamp COUNT
20120701 2
20120701 1
Du kan se hur du med 37 000 000 rader snart kommer att få resultat som du inte förväntar dig och inte kan förutse!
REDIGERA
Eftersom det ser ut som att du försöker få veckostart i dina resultat, medan du grupp för vecka kan använda följande för att få veckostart (ersätter CURRENT_TIMESTAMP med vilken kolumn du vill):
SELECT DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart
Du kan sedan gruppera efter detta datum också för att få veckoresultat och undvika besväret med att ha saker i din urvalslista som inte finns i din grupp senast.