Możesz użyć obu opcji YEAR(timestamp)
i WEEK(timestamp)
i użyj obu tych wyrażeń w SELECT
i GROUP BY
klauzula.
Niezbyt elegancki, ale funkcjonalny...
I oczywiście możesz również połączyć te dwie części daty w jedno wyrażenie, np. coś takiego jak
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Edytuj :Jak wskazuje Martin
możesz również użyć YEARWEEK(mysqldatefield)
funkcja, chociaż jej dane wyjściowe nie są tak przyjazne dla oka, jak dłuższa formuła powyżej.
Edytuj 2 [3 1/2 roku później!]:YEARWEEK(mysqldatefield)
z opcjonalnym drugim argumentem (mode
) ustawione na 0 lub 2 to prawdopodobnie najlepszy sposób na agregację według ukończenia tygodni (tj. wliczając w to tygodnie, które trwają ponad 1 stycznia), jeśli jest to pożądane. YEAR() / WEEK()
podejście początkowo zaproponowane w tej odpowiedzi skutkuje podziałem zagregowanych danych dla takiego "straddlingu" tygodnie na dwa:jeden z poprzednim rokiem, jeden z nowym.
Co roku czyste cięcie, kosztem dwóch niepełnych tygodni, jednego na każdym końcu, jest często pożądane w księgowości itp. a do tego YEAR() / WEEK()
podejście jest lepsze.