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

Agrupar por semana, como obter semanas vazias?


SQL não pode retornar linhas que não existem em alguma tabela. Para obter o efeito desejado, você precisará de uma tabela Weeks (WeekNo INT) com uma linha por semana possível do ano (que, IIRC, é 53 ou 54 semanas possíveis, dependendo de como você conta).

Em seguida, JUNTE-SE a esta tabela aos seus resultados regulares com um OUTER JOIN para obter as semanas extras adicionadas.
SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(date) as number 
    FROM YourTable RIGHT OUTER JOIN Weeks ON WEEK(YourTable.date) = Weeks.WeekNo

[Update]:Observe o usuário de COUNT(date) em vez de COUNT(*). O SQL não incluirá valores NULL na coluna de data ao somar o COUNT. Como as semanas que faltam não terão nenhuma data nelas, isso lhe dará corretamente 0 eventos para essas semanas.