sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo agrupar por semana en MySQL?

Puede usar ambos YEAR(timestamp) y WEEK(timestamp) , y use ambas expresiones en el SELECT y el GROUP BY cláusula.

No demasiado elegante, pero funcional...

Y, por supuesto, también puede combinar estas dos partes de la fecha en una sola expresión, es decir, algo como

SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))

Editar :Como Martin señala también puede usar el YEARWEEK(mysqldatefield) función, aunque su resultado no es tan agradable a la vista como la fórmula más larga anterior.

Editar 2 [¡3 años y medio después!]:
YEARWEEK(mysqldatefield) con el segundo argumento opcional (mode ) establecido en 0 o 2 es probablemente la mejor manera de agregar por completar semanas (es decir, incluidas las semanas que superan el 1 de enero), si eso es lo que se desea. El YEAR() / WEEK() El enfoque propuesto inicialmente en esta respuesta tiene el efecto de dividir los datos agregados para tal "straddling" semanas en dos:una con el año anterior, otra con el año nuevo.
Un corte limpio cada año, a costa de tener hasta dos semanas parciales, una en cada extremo, a menudo se desea en contabilidad, etc. y para eso el YEAR() / WEEK() el enfoque es mejor.