【问题标题】:MySQL - query - Mix between DISTINCT and GROUP BYMySQL - 查询 - DISTINCT 和 GROUP BY 之间的混合
【发布时间】:2013-08-04 16:31:40
【问题描述】:

我有下表:

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 或其他任何值都不重要。

谢谢:)

【问题讨论】:

    标签: mysql sql group-by distinct


    【解决方案1】:
    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

    【讨论】:

      【解决方案2】:

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

      SELECT DATE_FORMAT(timestamp,'%m/%d/%Y %H') timestamp, COUNT(id) 
      FROM tblTemp 
      GROUP BY DATE_FORMAT(timestamp,'%m/%d/%Y %H')
      

      【讨论】:

      • 这不会删除重复的timestamp
      • 是的,我错过了一个独特的..thnx
      【解决方案3】:
      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

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 1970-01-01
        • 2014-06-21
        • 2012-08-21
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多