Votre requête n'est pas déterministe, il n'est donc pas surprenant que vous obteniez des résultats inattendus. J'entends par là que vous pouvez exécuter cette requête sur les mêmes données 5 fois et obtenir 5 ensembles de résultats différents. Cela est dû au fait que vous sélectionnez DATE(timestamp)
mais regroupement par WEEK(DATE(startdate))
, la requête renvoie donc l'heure de la première ligne rencontrée par semaine de date de début dans TOUT commande.
Considérez les 2 lignes suivantes (avec l'horodatage au format date pour faciliter la lecture) :
TimeStamp StartDate
20120601 20120601
20120701 20120601
Votre requête est regroupée par WEEK(StartDate)
qui est 23, puisque les deux lignes ont la même valeur, vous vous attendez à ce que vos résultats aient 1 ligne avec un nombre de 2.
CEPENDANT DATE(Timestamp)
Est également dans la liste de sélection et puisqu'il n'y a pas de ORDER BY
la requête n'a aucune idée de l'horodatage à renvoyer '20120601' ou '20120701'. Ainsi, même sur ce petit ensemble de résultats, vous avez 50 h 50 de chances d'obtenir :
TimeStamp COUNT
20120601 2
et 50 h 50 de chance d'obtenir
TimeStamp COUNT
20120701 2
Si vous ajoutez plus de données à l'ensemble de données :
TimeStamp StartDate
20120601 20120601
20120701 20120601
20120701 20120701
Vous pourriez obtenir
TimeStamp COUNT
20120601 2
20120701 1
ou
TimeStamp COUNT
20120701 2
20120701 1
Vous pouvez voir comment avec 37 000 000 de lignes, vous obtiendrez bientôt des résultats auxquels vous ne vous attendiez pas et que vous ne pouvez pas prédire !
MODIFIER
Puisqu'il semble que vous essayez d'obtenir le début de la semaine dans vos résultats, alors que vous groupez par semaine, vous pouvez utiliser ce qui suit pour obtenir le début de la semaine (en remplaçant CURRENT_TIMESTAMP par la colonne de votre choix) :
SELECT DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart
Vous pouvez également regrouper par cette date pour obtenir des résultats hebdomadaires et éviter le problème d'avoir des éléments dans votre liste de sélection qui ne sont pas dans votre groupe par.