Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como agrupar por semana no MySQL?


Você pode usar YEAR(timestamp) e WEEK(timestamp) , e use essas duas expressões no SELECT e o GROUP BY cláusula.

Não excessivamente elegante, mas funcional...

E é claro que você também pode combinar essas duas partes de data em uma única expressão, ou seja, algo como
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))

Editar :Como Martin aponta você também pode usar o YEARWEEK(mysqldatefield) função, embora sua saída não seja tão amigável quanto a fórmula mais longa acima.

Editar 2 [3 1/2 anos depois!]:
YEARWEEK(mysqldatefield) com o segundo argumento opcional (mode ) definido como 0 ou 2 é provavelmente a melhor maneira de agregar por completo semanas (ou seja, inclusive para semanas que ultrapassem 1º de janeiro), se isso for o desejado. O YEAR() / WEEK() abordagem inicialmente proposta nesta resposta tem o efeito de dividir os dados agregados para tal "straddling" semanas em duas:uma com o ano anterior, outra com o ano novo.
Um corte limpo a cada ano, ao custo de ter até duas semanas parciais, uma em cada extremidade, é frequentemente desejado em contabilidade etc. e para isso o YEAR() / WEEK() abordagem é melhor.