Zwei Schritte dazu:
Erstens benötigen Sie eine Operation zum Abschneiden der Woche, die Ihre DATETIME
benötigt Artikel und geben Sie Mitternacht am vorangehenden Sonntag zurück (wenn Ihre Geschäftsregel besagt, dass die Woche am Sonntag beginnt).
Daraus wird ein geeignetes GROUP BY-Element. Der WEEK() / YEAR() Hack ist dafür nicht geeignet. Es macht in der letzten/ersten Woche jedes Jahres wirklich ein Chaos.
Meiner Erfahrung nach wird dieser Ausdruck den Wochen-Truncate-Trick für Sie erledigen, Sonntag - Samstag,
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))
Verwenden Sie diesen Ausdruck, um Wochen von Montag bis Sonntag zu erhalten.
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))
So können Sie dies tun.
SELECT COUNT(whatever), SUM(whatelse),
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) as WEEKSTART,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
Wie kann man in MySQL nach Woche gruppieren?
Zweitens müssen Sie diesem abgeschnittenen Datum sechs Tage hinzufügen, damit Sie den letzten Tag jeder Woche zusammen mit dem ersten Tag anzeigen können.
Dies ist eine gute Möglichkeit, dies mit einer verschachtelten Abfrage zu tun
SELECT whats, elses, weekstart, weekstart + INTERVAL 6 DAY AS weekend
FROM (
SELECT COUNT(whatever) AS whats, SUM(whatelse) AS elses,
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) AS weekstart,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
) AS summary
ORDER BY weekstart
Machen Sie viel davon? Ich schlage vor, Sie erstellen eine gespeicherte TRUNC_WEEK
Funktion.