我有下表:
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或其他任何内容,只要时间和日期可识别,则不重要。< / p>
谢谢:)
答案 0 :(得分: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
答案 1 :(得分:0)
可能是这样的(您可能需要检查日期格式字符串)
SELECT DATE_FORMAT(timestamp,'%m/%d/%Y %H') timestamp, COUNT(id)
FROM tblTemp
GROUP BY DATE_FORMAT(timestamp,'%m/%d/%Y %H')
答案 2 :(得分: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');
<强> fiddle 强>