Вашата заявка е недетерминирана, така че не е изненадващо, че получавате неочаквани резултати. С това имам предвид, че бихте могли да стартирате тази заявка върху едни и същи данни 5 пъти и да получите 5 различни набора от резултати. Това се дължи на факта, че избирате DATE(timestamp)
но групиране по WEEK(DATE(startdate))
, следователно заявката връща часа на първия ред, който среща, за седмица с начална дата във ВСЯКАКВА поръчка.
Помислете за следните 2 реда (с времеви печат във формат на дата за по-лесно четене):
TimeStamp StartDate
20120601 20120601
20120701 20120601
Заявката ви се групира по WEEK(StartDate)
което е 23, тъй като и двата реда се оценяват на една и съща стойност, бихте очаквали резултатите ви да имат 1 ред с брой 2.
ОБАЧЕ DATE(Timestamp)
Също така е в списъка за избор и тъй като няма ORDER BY
израз заявката няма представа кое клеймо за време да върне '20120601' или '20120701'. Така че дори при този малък набор от резултати имате шанс 50:50 да получите:
TimeStamp COUNT
20120601 2
и шанс 50:50 за получаване
TimeStamp COUNT
20120701 2
Ако добавите още данни към набора от данни така:
TimeStamp StartDate
20120601 20120601
20120701 20120601
20120701 20120701
Можете да получите
TimeStamp COUNT
20120601 2
20120701 1
или
TimeStamp COUNT
20120701 2
20120701 1
Можете да видите как с 37 000 000 реда скоро ще получите резултати, които не очаквате и не можете да предвидите!
РЕДАКТИРАНЕ
Тъй като изглежда, че се опитвате да получите началото на седмицата в резултатите си, докато група по седмица можете да използвате следното, за да получите началото на седмицата (заменяйки CURRENT_TIMESTAMP с колоната, която искате):
SELECT DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart
След това можете да групирате и по тази дата, за да получавате седмични резултати и да избегнете проблемите да имате неща в избрания списък, които не са във вашата група.