Mysql
 sql >> Base de données >  >> RDS >> Mysql

Regrouper par jour et toujours afficher les jours sans lignes ?

MySQL n'inventera pas de lignes pour vous, donc si les données ne sont pas là, elles ne seront naturellement pas affichées.

Vous pouvez créer une table de calendrier et y participer,

create table calendar (
    day date primary key,
);

Remplissez ce tableau avec des dates (facile avec une procédure stockée, ou juste un script général), jusqu'à environ 2038 et quelque chose d'autre se cassera probablement jusqu'à ce que cela devienne un problème.

Votre requête devient alors par exemple

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;

Maintenant, vous pouvez étendre la table du calendrier avec d'autres colonnes qui vous indiquent le mois, l'année, la semaine, etc. afin que vous puissiez facilement produire des statistiques pour d'autres unités de temps. (et les puristes pourraient dire que la table de calendrier aurait une clé primaire entière id à laquelle la table de journaux fait référence au lieu d'une date)