日付の timetsamp を使用すると、次のことができます。
SELECT COUNT(1),TimeStampHour FROM
(
SELECT
FROM_UNIXTIME(UNIX_TIMESTAMP(date_created) -
MOD(UNIX_TIMESTAMP(date_created),3600)) TimeStampHour
FROM tournament
) A GROUP BY TimeStampHour;
または、タイムスタンプを数値としてのみ必要な場合
SELECT COUNT(1),TimeStampHour FROM
(
SELECT
UNIX_TIMESTAMP(date_created) -
MOD(UNIX_TIMESTAMP(date_created),3600) TimeStampHour
FROM tournament
) A GROUP BY TimeStampHour;
試してみる !!!
説明
3600 という数字が使われている理由は、1 時間は 3600 秒だからです。正確な時間のタイムスタンプを取得するには、タイムスタンプから削除する秒数を取得するために、タイムスタンプのモジュラスと 3600 を減算する必要があります。
これを示すサンプル コードを次に示します。
SELECT *,
ts_now - ts_extra ts_hr,
FROM_UNIXTIME(ts_now - ts_extra) hr
FROM
(SELECT
NOW() now,
UNIX_TIMESTAMP(NOW()) ts_now,
MOD(UNIX_TIMESTAMP(NOW()),3600) ts_extra
) A;
今実行すると、これが得られます
mysql> SELECT *,
-> ts_now - ts_extra ts_hr,
-> FROM_UNIXTIME(ts_now - ts_extra) hr
-> FROM
-> (SELECT
-> NOW() now,
-> UNIX_TIMESTAMP(NOW()) ts_now,
-> MOD(UNIX_TIMESTAMP(NOW()),3600) ts_extra
-> ) A;
+---------------------+------------+----------+------------+---------------------+
| now | ts_now | ts_extra | ts_hr | hr |
+---------------------+------------+----------+------------+---------------------+
| 2013-06-04 11:52:10 | 1370361130 | 3130 | 1370358000 | 2013-06-04 11:00:00 |
+---------------------+------------+----------+------------+---------------------+
1 row in set (0.00 sec)
mysql>