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.