Můžete použít obě YEAR(timestamp)
a WEEK(timestamp)
a oba tyto výrazy použijte v SELECT
a GROUP BY
doložka.
Ne přehnaně elegantní, ale funkční...
A samozřejmě můžete tyto dvě části data spojit také do jediného výrazu, tedy něco jako
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Upravit :Jak Martin upozorňuje
můžete také použít YEARWEEK(mysqldatefield)
funkce, ačkoli její výstup není tak příjemný pro oči jako delší vzorec výše.
Úprava 2 [3 1/2 roku později!]:YEARWEEK(mysqldatefield)
s volitelným druhým argumentem (mode
) nastavená na 0 nebo 2 je pravděpodobně nejlepší způsob agregace podle úplného týdnů (tj. včetně týdnů, které přesahují 1. leden), pokud je to žádoucí. YEAR() / WEEK()
přístup původně navržený v této odpovědi má za následek rozdělení agregovaných dat pro takové "rozkročení" týdny ve dvou:jeden s předchozím rokem, jeden s novým rokem.
Čistý řez každý rok za cenu až dvou dílčích týdnů, jeden na každém konci, je často požadován v účetnictví atd. a k tomu YEAR() / WEEK()
přístup je lepší.