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

¿Agrupar por día y seguir mostrando días sin filas?

MySQL no inventará filas por usted, por lo que si los datos no están allí, naturalmente no se mostrarán.

Puede crear una tabla de calendario y unirse a ella,

create table calendar (
    day date primary key,
);

Llene esta tabla con fechas (fácil con un procedimiento almacenado, o simplemente con algunas secuencias de comandos generales), hasta alrededor de 2038 y es probable que algo más se rompa hasta que eso se convierta en un problema.

Su consulta se convierte en, por ejemplo,

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;

Ahora, puede ampliar la tabla de calendario con otras columnas que le indiquen el mes, el año, la semana, etc. para que pueda producir fácilmente estadísticas para otras unidades de tiempo. (y los puristas podrían argumentar que la tabla de calendario tendría una clave primaria entera de identificación a la que hace referencia la tabla de registros en lugar de una fecha)