0

我有下表:

SELECT * FROM tblTemp;
+-----+---------------------+
| id  | timestamp           |
+-----+---------------------+
|  84 | 2013-07-18 22:36:32 |
|  85 | 2013-07-18 22:36:33 |
|  88 | 2013-07-18 22:36:33 |
|  89 | 2013-07-18 22:36:34 |
| 263 | 2013-08-04 16:01:05 |
| 264 | 2013-08-04 16:01:11 |
| 272 | 2013-08-04 16:01:42 |
| 273 | 2013-08-04 16:01:42 |
| 274 | 2013-08-04 16:01:42 |
| 275 | 2013-08-04 16:21:25 |
| 276 | 2013-08-04 16:21:25 |
| 279 | 2013-08-04 16:21:26 |
| 280 | 2013-08-04 16:21:27 |
| 281 | 2013-08-04 16:21:27 |
+-----+---------------------+
14 rows in set (0.00 sec)

首先,我想像这样删除视图中的所有双时间戳

SELECT DISTINCT timestamp FROM tblTemp;
+---------------------+
| timestamp           |
+---------------------+
| 2013-07-18 22:36:32 |
| 2013-07-18 22:36:33 |
| 2013-07-18 22:36:34 |
| 2013-08-04 16:01:05 |
| 2013-08-04 16:01:11 |
| 2013-08-04 16:01:42 |
| 2013-08-04 16:21:25 |
| 2013-08-04 16:21:26 |
| 2013-08-04 16:21:27 |
+---------------------+
9 rows in set (0.00 sec)

但这还不够。我需要计数,每小时数据库中有多少条目(没有双打) - 关于这个:

+---------------------+-------+
| timestamp           | count |
+---------------------+-------+
| 2013-07-18 22:00:00 | 3     |
| 2013-08-04 16:00:00 | 6     |
+---------------------+-------|

首先我想我可以使用以下命令:

SELECT timestamp, COUNT(id) FROM tblTemp GROUP BY YEAR(timestamp), MONTH(timestamp), DAY(timestamp), HOUR(timestamp)

但它不能正常工作。该命令计算所有行:/

+---------------------+-------+
| timestamp           | count |
+---------------------+-------+
| 2013-07-18 22:36:32 |     4 |
| 2013-08-04 16:01:05 |    10 |
+---------------------+-------+

列时间戳中的值是否为 2013-07-18 22:00:00 或 2013-07-18 22:36:32 或其他任何值并不重要,只要时间和日期是可识别的即可。

谢谢 :)

4

3 回答 3

3
SELECT DATE_FORMAT(timestamp,'%m/%d/%Y %H') AS date_hour, 
  COUNT(DISTINCT timestamp) 
FROM tblTemp 
GROUP BY date_hour

http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_count-distinct

于 2013-08-04T16:54:58.460 回答
0

也许是这样的(您可能需要检查日期格式字符串)

SELECT DATE_FORMAT(timestamp,'%m/%d/%Y %H') timestamp, COUNT(id) 
FROM tblTemp 
GROUP BY DATE_FORMAT(timestamp,'%m/%d/%Y %H')
于 2013-08-04T16:44:08.837 回答
0
select DATE_FORMAT(`timestamp`, '%Y-%m-%d %H'), count(*)
 from (select distinct `timestamp` from Table1) abc
group by DATE_FORMAT(`timestamp`, '%Y-%m-%d %H');

小提琴

于 2013-08-04T16:45:41.253 回答