sql >> Databasteknik >  >> RDS >> Mysql

Gruppera efter dag och fortfarande visa dagar utan rader?

MySQL kommer inte att uppfinna rader åt dig, så om data inte finns där kommer de naturligtvis inte att visas.

Du kan skapa en kalendertabell och gå med i den,

create table calendar (
    day date primary key,
);

Fyll den här tabellen med datum (enkelt med en lagrad procedur, eller bara lite allmänt skript), fram till omkring 2038 och något annat kommer sannolikt att bryta enhet som blir ett problem.

Din fråga blir då t.ex.

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;

Nu kan du utöka kalendertabellen med andra kolumner som talar om för dig månad, år, vecka etc. så att du enkelt kan producera statistik för andra tidsenheter. (och purister kan hävda att kalendertabellen skulle ha en id-heltalsprimärnyckel som loggtabellen refererar till istället för ett datum)



  1. Hur man återställer databasen med RMAN

  2. Ska jag inaktivera MySQL strikt läge?

  3. Hur man löser org.hibernate.QueryException:Inte alla namngivna parametrar har ställts in fel?

  4. MySQL infoga från ett textområde till flera rader