sql >> Databáze >  >> RDS >> Mysql

Seskupit po dnech a přesto zobrazit dny bez řádků?

MySQL za vás nevymyslí řádky, takže pokud tam data nejsou, přirozeně se nezobrazí.

Můžete vytvořit tabulku kalendáře a připojit se k ní,

create table calendar (
    day date primary key,
);

Vyplňte tuto tabulku daty (snadno pomocí uložené procedury nebo jen nějakým obecným skriptováním) až do roku 2038 a něco jiného pravděpodobně zlomí jednotku, což se stane problémem.

Váš dotaz se pak změní na např.

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;

Nyní můžete tabulku kalendáře rozšířit o další sloupce, které vám řeknou měsíc, rok, týden atd., takže můžete snadno vytvářet statistiky pro jiné časové jednotky. (a puristé by mohli tvrdit, že tabulka kalendáře by měla primární klíč id integer, na který tabulka protokolů odkazuje, místo data)



  1. Jak generovat skripty drop Unique Constraint v databázi SQL Server - SQL Server / Výukový program TSQL, část 99

  2. Vygenerujte náhodné LocalDate pomocí java.time

  3. Běžné chyby ER diagramu

  4. Jak nastavit časové pásmo databáze v application.ini