Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann man in MySQL nach Woche gruppieren?

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 YEARWEEK(mysqldatefield) Funktion, obwohl ihre Ausgabe nicht so augenfreundlich ist wie die längere Formel oben.

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.