Du kan använda både YEAR(tidsstämpel)
och WEEK(timestamp )
, och använd båda dessa uttryck i SELECT
och GROUP BY
klausul.
Inte alltför elegant, men funktionell...
Och naturligtvis kan du kombinera dessa två datumdelar i ett enda uttryck också, alltså något liknande
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Redigera :Som Martin påpekar
du kan också använda
Redigera 2 [3 1/2 år senare!]:YEARWEEK(mysqldatefield)
med det valfria andra argumentet (läge
) satt till antingen 0 eller 2 är förmodligen det bästa sättet att aggregera genom att komplett veckor (dvs. inklusive för veckor som sträcker sig över 1 januari), om det är vad som önskas. YEAR()/WEEK()
tillvägagångssätt som ursprungligen föreslogs i detta svar har effekten att dela upp den aggregerade informationen för sådan "gränsöverskridande" veckor i två:en med det förra året, en med det nya året.
En ren klippning varje år, till priset av att ha upp till två delveckor, en i vardera änden, är ofta önskvärt i bokföring etc. och för det YEAR() / WEEK()
tillvägagångssätt är bättre.