Sie können beide verwenden JAHR(Zeitstempel)
und WEEK(timestamp )
, und verwenden Sie diese beiden Ausdrücke in SELECT
und GROUP BY
Klausel.
Nicht übermäßig elegant, aber funktionell...
Und natürlich können Sie diese beiden Datumsteile auch in einem einzigen Ausdruck kombinieren, z. B. so etwas wie
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Bearbeiten :Wie Martin darauf hinweist
Sie können auch den Code
Bearbeiten 2 [3 1/2 Jahre später!]:YEARWEEK(mysqldatefield)
mit dem optionalen zweiten Argument (mode
) entweder auf 0 oder 2 gesetzt, ist wahrscheinlich die beste Art, um durch complete zu aggregieren Wochen (d. h. auch für Wochen, die sich über den 1. Januar erstrecken), wenn dies gewünscht wird. Das YEAR() / WEEK()
Der ursprünglich in dieser Antwort vorgeschlagene Ansatz hat zur Folge, dass die aggregierten Daten für ein solches „Spreizen“ aufgeteilt werden Wochen in zwei:eine mit dem vorherigen Jahr, eine mit dem neuen Jahr.
Eine saubere Abrechnung jedes Jahr auf Kosten von bis zu zwei Teilwochen, eine an jedem Ende, wird oft in der Buchhaltung usw. gewünscht. und dafür das YEAR() / WEEK()
Ansatz ist besser.