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

特定の日付にデータがない場合でもカウントされたmysql日付リスト

    postidを想定 sがテーブル内で連続している場合、次のクエリ:

    SELECT
      DATE_FORMAT(b.date, '%Y-%m-%d') date,
      COUNT(c.postid)
    FROM
    (
      SELECT
        (SELECT MAX(date) FROM ex) + INTERVAL 3 DAY - INTERVAL a.postid DAY AS date
      FROM
        ex a
    ) b
    LEFT JOIN
      ex c ON c.date = b.date
    GROUP BY
      b.date
    ORDER BY
      b.date
    

    生成:

    date    COUNT(c.postid)
    2012-01-01  2
    2012-01-02  2
    2012-01-03  0
    2012-01-04  2
    2012-01-05  1
    2012-01-06  0
    2012-01-07  0
    

    http://sqlfiddle.com/#!2/2cf8d/2 を参照してください。

    postidの場合 sが連続していない場合は、idsを使用できます 連続するIDのテーブル:

    SELECT
      DATE_FORMAT(b.date, '%Y-%m-%d') date,
      COUNT(c.postid)
    FROM
    (
      SELECT
        (SELECT MAX(date) FROM ex) + INTERVAL 3 DAY - INTERVAL a.id DAY AS date
      FROM
        ids a
    ) b
    LEFT JOIN
      ex c ON c.date = b.date
    GROUP BY
      b.date
    ORDER BY
      b.date DESC
    LIMIT 7
    

    http://sqlfiddle.com/#!2/13035/1 を参照してください。



    1. MySQLはどのようにデータを保存しますか

    2. SQL ServerのSELECTから更新するにはどうすればよいですか?

    3. アップサートのバージョンの選択/挿入:高い同時実行性のデザインパターンはありますか?

    4. PreparedStatement:列名をパラメーターとして指定できますか?