È possibile utilizzare entrambi YEAR(timestamp)
e WEEK(timestamp)
, e utilizzare entrambi i queste espressioni nella SELECT
e della GROUP BY
clausola.
Non eccessivamente elegante, ma funzionale ...
E ovviamente puoi anche combinare queste due parti della data in un'unica espressione, cioè qualcosa di simile
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Modifica : come sottolinea Martin , puoi anche utilizzare la YEARWEEK(mysqldatefield)
funzione, sebbene il suo output non sia così facile da vedere come la formula più lunga sopra.
Modifica 2 [3 anni e mezzo dopo!]:
YEARWEEK(mysqldatefield)
Con il secondo argomento opzionale ( mode
) impostato su 0 o 2 è probabilmente il modo migliore per aggregare per settimane complete (cioè includendo per settimane che si trovano a cavallo del 1 ° gennaio), se questo è ciò che si desidera. L' YEAR() / WEEK()
approccio inizialmente proposto in questa risposta ha l'effetto di suddividere i dati aggregati per tali settimane "a cavallo tra" in due: uno con l'anno precedente, uno con il nuovo anno.
Un taglio netto ogni anno, a costo di avere fino a due settimane parziali, una per ciascuna estremità, è spesso richiesto in contabilità ecc. E per questo l' YEAR() / WEEK()
approccio è migliore.