日付の単位をずらしてデータを整形する(DATE_FORMAT関数を使用)

帳票出力で、日の始まりをPM00:00としたいとき、
DATE_FORMAT()関数のformat指定子%rによって午前中か午後かを識別し、午前中であれば前日の日付に変換する。あとは日付でGROUPBYして出力

例)

$sql = "SELECT COUNT(*) AS cnt, SUM(price) AS sum,
        CASE SUBSTRING(DATE_FORMAT(date_time,'%r'), 10, 2) 
	WHEN 'AM' THEN DATE_FORMAT(date_time,'%Y-%m-%d') 
	WHEN 'PM' THEN DATE_FORMAT(ADDDATE(DATE_FORMAT(date_time,'%Y-%m-%d'), 1),'%Y-%m-%d') 
	END AS data_date 
	FROM order 
	GROUP BY data_date ";

これで、

  1. |data_date(日付)|cnt(件数)|sum(合計金額)|
  2. |2010-09-01 | 200| 4000000|
  3. |2010-09-02 | 151| 3520000|
  4. |2010-09-03 | 550| 3000000|
  5. |2010-09-04 | 233| 2469000|


などと整形できる。