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

Agrupar por dia e ainda mostrar dias sem linhas?


O MySQL não inventará linhas para você, então se os dados não estiverem lá, eles naturalmente não serão mostrados.

Você pode criar uma tabela de calendário e participar dela,
create table calendar (
    day date primary key,
);

Preencha esta tabela com datas (fácil com um procedimento armazenado, ou apenas alguns scripts gerais), até por volta de 2038 e outra coisa provavelmente quebrará até que se torne um problema.

Sua consulta torna-se, por exemplo,
SELECT logTime, COUNT(*) 
  FROM calendar cal left join logs l on cal.day = l.logTime 
WHERE day >= '2011-02-01' AND day <= '2011-02-04' GROUP BY day;

Agora, você pode estender a tabela de calendário com outras colunas que informam o mês, ano, semana etc. para que você possa produzir facilmente estatísticas para outras unidades de tempo. (e os puristas podem argumentar que a tabela de calendário teria uma chave primária id integer que a tabela de logs referencia em vez de uma data)