通常、00:00:00 ~ 23:59:59 までを1日として扱うところを、
05:00:00 ~ 翌04:59:59 までを1日として扱いたいです。
例えば、2019/10/31 05:00:00 ~ 2019/11/01 04:59:59 までは 2019/10/30 のデータとして扱い、
2019/11/01 05:00:00 ~ 2019/11/02 04:59:59 までを 2019/11/01 のデータとして扱うという具合です。
データベースには次のようなデータが入っています。
> SELECT id, name, display_at FROM programs ORDER BY id DESC LIMIT 10; +------+--------+---------------------+ | id | name | display_at | +------+--------+---------------------+ | 8300 | aaaaaa | 2019-11-01 04:37:00 | | 8299 | aaaaaa | 2019-11-01 04:07:00 | | 8298 | aaaaaa | 2019-11-01 03:37:00 | | 8297 | aaaaaa | 2019-11-01 03:34:00 | | 8296 | aaaaaa | 2019-11-01 02:29:00 | | 8295 | aaaaaa | 2019-11-01 01:59:00 | | 8294 | aaaaaa | 2019-11-01 01:29:00 | | 8293 | aaaaaa | 2019-11-01 00:54:00 | | 8292 | aaaaaa | 2019-10-31 23:59:00 | | 8291 | aaaaaa | 2019-10-31 23:00:00 | | 8290 | aaaaaa | 2019-10-31 22:00:00 | +------+--------+---------------------+
普通に日別でグループ化すると、次のようなSQLになると思います。
SELECT DATE_FORMAT(display_at, '%Y') AS d_year, DATE_FORMAT(display_at, '%c') AS d_month, DATE_FORMAT(display_at, '%e') AS d_day FROM programs GROUP BY DATE_FORMAT(display_at, '%Y-%m-%d') ; +---------+----------+--------+ | d_year | d_month | d_day | +---------+----------+--------+ | 2019 | 10 | 31 | | 2019 | 11 | 1 | +---------+----------+--------+
このように、日をまたいだデータをグループ化するにはどのようなSQLを組めば良いのでしょうか?
非常に困っています。皆様どうかよろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。