Вы можете использовать и 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 1/2 года спустя!]:
YEARWEEK(mysqldatefield)
С необязательным вторым аргументом ( mode
), установленным либо на 0, либо на 2, вероятно, лучший способ агрегирования по полным неделям (то есть включая недели, которые охватывают период с 1 января), если это что желательно. YEAR() / WEEK()
Подход первоначально предложенный в этом ответе есть эффект расщепления агрегированных данных для такого «ТРАНСЗОНАЛЬНЫЙ» недели в два: один с бывшим годом, один с новым годом.
Чистая срезка каждый год за счет наличия до двух неполных недель, по одной на каждом конце, часто желательна в бухгалтерском учете и т. Д., И для этого YEAR() / WEEK()
подход лучше.