Puoi utilizzare entrambi YEAR(timestamp)
e WEEK(timestamp)
e usa entrambe queste espressioni in SELECT
e il GROUP BY
clausola.
Non eccessivamente elegante, ma funzionale...
E ovviamente puoi anche combinare queste due parti della data in un'unica espressione, ad esempio qualcosa come
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Modifica :Come Martin fa notare
puoi anche usare YEARWEEK(mysqldatefield)
funzione, sebbene il suo output non sia così intuitivo come la formula più lunga sopra.
Modifica 2 [3 anni e mezzo dopo!]:YEARWEEK(mysqldatefield)
con il secondo argomento facoltativo (mode
) impostato su 0 o 2 è probabilmente il modo migliore per aggregare per completato settimane (cioè comprese le settimane a cavallo del 1° gennaio), se è ciò che si desidera. Il YEAR() / WEEK()
approccio inizialmente proposto in questa risposta ha l'effetto di dividere i dati aggregati per tale "a cavallo" settimane in due:una con l'anno precedente, una con l'anno nuovo.
Un taglio netto ogni anno, a costo di avere fino a due settimane parziali, una alle due estremità, è spesso desiderato in contabilità, ecc. e per questo YEAR() / WEEK()
approccio è migliore.