我有一个表,其中每一行都有一个时间戳。时间戳是一个unix时间戳。我想使用这些数据做一些报告,这需要我按特定时间段对这些数据进行分组(现在,我们只说天:所以 86400 秒)。这可以通过设置时间戳来实现,即:
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 的所有值最终都在特定组中?
谢谢!