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

MySQLは、レコードのない日付のカウントを0と表示します

    スレッドからの私の以前の回答からOK MySQL単一テーブル、過去7日間を選択し、空の行を含める

    日付の選択を動的にするためにできることは次のとおりです

    select 
    t1.attempt_date,
    coalesce(SUM(t1.attempt_count+t2.attempt_count), 0) AS attempt_count
    from
    (
      select DATE_FORMAT(a.Date,'%Y/%m/%d') as attempt_date,
      '0' as  attempt_count
      from (
        select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
        from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
      ) a
      where a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
    )t1
    left join
    (
      SELECT DATE_FORMAT(attempt_date,'%Y/%m/%d') AS attempt_date, 
      COUNT(*) AS attempt_count
      FROM users_attempts
      WHERE DATE_SUB(attempt_date, INTERVAL 1 DAY) > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) 
      GROUP BY DAY(attempt_date) DESC
    )t2
    on t2.attempt_date = t1.attempt_date
    group by DAY(t1.attempt_date)
    order by t1.attempt_date desc;
    

    デモ



    1. leopardへのmysqlのインストール:ソケットを介してローカルMySQLサーバーに接続できません

    2. 列が変更された場合にのみSQL更新トリガー

    3. Laravel 5.1で生のクエリを実行する方法は?

    4. MSSQL CTEクエリをMySQLに変換する方法は?