Ви можете використовувати обидва 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()
підхід кращий.