mysqlでdate型に時間を足してdatetimeを取得する
日付(date)と時刻(int)を別カラムにしているテーブルがあるとする。
CREATE TABLE `event` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `prefecture` varchar(3) NOT NULL, `event_date` date NOT NULL, `event_hour` smallint(6) NOT NULL, PRIMARY KEY (`id`) );
| id | prefecture | event_date | event_hour |
|---|---|---|---|
| 1 | 千葉 | 2014-07-19 | 12 |
| 2 | 千葉 | 2014-08-01 | 15 |
| 3 | 佐賀 | 2014-10-10 | 18 |
| 4 | 滋賀 | 2014-12-01 | 10 |
| 5 | 佐賀 | 2014-10-10 | 17 |
| 6 | 滋賀 | 2014-12-02 | 9 |
このテーブルで県毎に最新の日時を取得する必要があるとする。
日時をdatetime型1カラムで持っていれば何の問題もないが、別カラムになっているため工夫が必要。
調べた結果、date_addを使用して時間を足してやればよさそう
SELECT prefecture, MAX(DATE_ADD(event_date, INTERVAL event_hour HOUR)) as latest FROM event GROUP BY prefecture;
| prefecture | latest |
|---|---|
| 佐賀 | 2014-10-10 18:00:00 |
| 千葉 | 2014-08-01 15:00:00 |
| 滋賀 | 2014-12-02 09:00:00 |