Вы можете использовать как YEAR(timestamp)
, так и WEEK(timestamp)
, и использовать оба эти выражения в выражениях SELECT
и GROUP BY
.
Не слишком элегантно, но функционально ...
И, конечно, вы можете объединить эти две части даты в одном выражении, то есть что-то вроде
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Редактировать : Как отмечает Мартин ХХ, вы также можете использовать функцию YEARWEEK(mysqldatefield)
, хотя ее вывод не так удобен для глаз, как более длинная формула выше.
Редактировать 2 [3 с половиной года спустя!]:
YEARWEEK(mysqldatefield)
с необязательным вторым аргументом (mode
), установленным в 0 или 2, вероятно, является наилучшим способом агрегирования по полным неделям (т. Е. Включая недели, которые колеблются после 1 января), если это что желательно. Подход YEAR() / WEEK()
, первоначально предложенный в этом ответе, позволяет разделить агрегированные данные для таких "колеблющихся" недель на две части: одну с предыдущим годом, одну с новым годом.
Ежегодно необходимо проводить чистую обработку каждый год за счет наличия до двух неполных недель, по одной на каждом конце, что часто необходимо для учета и т. Д., И для этого подход YEAR() / WEEK()
лучше.