我有一個表,其中每行都有一個時間戳。時間戳是一個unix時間戳。我想使用這些數據做一些報告,這需要我將這些數據分組一段時間(現在,讓我們只說一天:如此86400秒)。這可以通過地板時間戳來實現,即:帶時區支持的地板unix時間戳
mysql> set time_zone='+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select NOW(), FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP()/86400)*86400);
+---------------------+----------------------------------------------------+
| NOW() | FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP()/86400)*86400) |
+---------------------+----------------------------------------------------+
| 2013-01-17 06:06:37 | 2013-01-17 00:00:00 |
+---------------------+----------------------------------------------------+
1 row in set (0.01 sec)
這讓我做下面的數據彙總:
select FROM_UNIXTIME(FLOOR(timestamp/86400)*86400) groupts, count(some_id) from table group by groupts order by groupts;
所有這一切都完美的作品,現在我想比較數據還有其他一些報告,我只在特定時區有數據,我們說它的EST。
不幸的是(顯然),地板不工作了:
mysql> set time_zone='-05:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select NOW(), FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP()/86400)*86400);
+---------------------+----------------------------------------------------+
| NOW() | FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP()/86400)*86400) |
+---------------------+----------------------------------------------------+
| 2013-01-17 01:10:38 | 2013-01-16 19:00:00 |
+---------------------+----------------------------------------------------+
1 row in set (0.00 sec)
並最終引出了我的問題: 有什麼辦法地板基於特定時區的時間戳?即地板將確保該時區中從00:00-23:59的所有值都以特定組爲單位?
謝謝!
我編輯了你的答案並修復了查詢。實際查詢應該是:FLOOR(((timestamp +(offset_in_seconds))/ 86400)* 86400 - (offset_in_seconds)。謝謝你的回答! –
感謝您的修正! –