Mysql
 sql >> Database >  >> RDS >> Mysql

Raggruppare per giorno e mostrare ancora i giorni senza righe?

MySQL non inventerà righe per te, quindi se i dati non sono presenti, naturalmente non verranno mostrati.

Puoi creare una tabella del calendario e unirti a quella

create table calendar (
    day date primary key,
);

Riempi questa tabella con le date (facile con una procedura memorizzata o solo con alcuni script generici), fino al 2038 circa e qualcos'altro probabilmente si romperà finché non diventerà un problema.

La tua richiesta diventa ad es.

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;

Ora puoi estendere la tabella del calendario con altre colonne che ti dicono il mese, l'anno, la settimana ecc. in modo da poter facilmente produrre statistiche per altre unità di tempo. (e i puristi potrebbero obiettare che la tabella del calendario avrebbe una chiave primaria id intera a cui fa riferimento la tabella dei log invece di una data)