Можете да използвате и двете 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()
подходът е по-добър.