Mysql
 sql >> Database >  >> RDS >> Mysql

Come raggruppare per settimana in MySQL?

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.