sql >> データベース >  >> RDS >> Mysql

日ごとにグループ化し、行のない日を表示しますか?

    MySQLは行を作成しないため、データが存在しない場合、当然、行は表示されません。

    カレンダーテーブルを作成して、それに参加することができます

    create table calendar (
        day date primary key,
    );
    

    このテーブルに、2038年頃までの日付(ストアドプロシージャまたは一般的なスクリプトを使用して簡単に)を入力します。他の何かが問題になるユニットを壊す可能性があります。

    すると、クエリは次のようになります。

    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;
    

    これで、月、年、週などを示す他の列でカレンダーテーブルを拡張できるため、他の時間単位の統計を簡単に作成できます。 (そして純粋主義者は、カレンダーテーブルには日付の代わりにログテーブルが参照するid整数の主キーがあると主張するかもしれません)



    1. Oracleで行を削除する方法

    2. PgBouncerを使用したPostgreSQL接続プール

    3. foreach%dopar%+ RPostgreSQL

    4. Mysql:外部キーを追加してもMyISAMテーブルに警告/エラーは発生しません