sql >> Database >  >> RDS >> Mysql

Per dag groeperen en toch dagen zonder rijen weergeven?

MySQL gaat geen rijen voor je verzinnen, dus als de gegevens er niet zijn, worden ze natuurlijk niet getoond.

Je kunt een kalendertabel maken en daaraan meedoen,

create table calendar (
    day date primary key,
);

Vul deze tabel met datums (gemakkelijk met een opgeslagen procedure, of gewoon wat algemene scripting), tot rond 2038 en er zal waarschijnlijk iets anders breken totdat dat een probleem wordt.

Uw vraag wordt dan bv.

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 zou u de kalendertabel kunnen uitbreiden met andere kolommen die u de maand, het jaar, de week enz. vertellen, zodat u gemakkelijk statistieken kunt maken voor andere tijdseenheden. (en puristen zouden kunnen beweren dat de kalendertabel een id integer primaire sleutel zou hebben waarnaar de logtabel verwijst in plaats van een datum)



  1. RoR:kan de_kolom niet wijzigen in postgres, prima in MySQL (MySQL voor ontwikkeling, Postgres op Heroku)

  2. PostgreSQL Split-Brain elimineren in multi-clouddatabases

  3. hoe mysql_data_seek gebruiken met PDO?

  4. Hoe de Alter Table-instructie in SQL te gebruiken?