【问题标题】:GROUP BY date range按日期范围分组
【发布时间】:2013-11-04 14:04:12
【问题描述】:
CREATE TABLE `connectionLog` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `serverTimeConnected` datetime NOT NULL,
  `serverTimeDisconnected` datetime  NOT NULL,
  PRIMARY KEY (`ID`)
);

通过这个查询,我得到了 serverTimeConnected 在一小时内的所有 ID。

SELECT  HOUR( `serverTimeConnected`) as STUNDE, 
    count(`ID`) as HITS 
FROM    `connectionLog` 
GROUP BY HOUR( `serverTimeConnected`)

但我需要 serverTimeConnected 和 serverTimeDisconnected 之间的所有 ID。

ID  serverTimeConnected serverTimeDisconnected
1   10:00:00            10:10:00    
2   10:00:00            11:10:00    
3   10:00:00            12:10:00

我需要一个结果——比如

STUNDE  HITS
10,     3
11,     2
12,     1

【问题讨论】:

    标签: mysql sql datetime select group-by


    【解决方案1】:

    更新:我找到了这个解决方案

     SELECT Stunden.ID, COUNT(Stunden.ID) as HITS FROM Stunden
    INNER JOIN connectionLog cl 
      ON (
        (ADDTIME(DATE_FORMAT(cl.serverTimeConnected,'%Y-%m-%d 00:00:00'),CONCAT(Stunden.ID,":00:00")) 
          BETWEEN cl.serverTimeConnected AND cl.serverTimeDisconnected)
        OR
          (ADDTIME(DATE_FORMAT(cl.serverTimedisConnected,'%Y-%m-%d 00:00:00'),CONCAT(Stunden.ID,":00:00")) 
          BETWEEN cl.serverTimeConnected AND cl.serverTimeDisconnected)
         )
    
    GROUP BY Stunden.ID
    

    http://sqlfiddle.com/#!2/6f3b0/11(更新)

    Stunden 表是所有可用时间的列表。 一个简单的INNER JOIN,当一个小时在连接和断开之间(看看当天),我们可以得到我们搜索的匹配数。 然后Group by 小时,我们匹配正确的HITS

    【讨论】:

    • http://sqlfiddle.com/#!2/3a1ab/1/0 有效。但我还有一个问题:serverTimeConnected = "2013-08-20 23:00:00" 和 serverTimeDisconnected = "2013-08-21 01:10:00"
    • 我已经更新了答案。请注意,这是一个简单的查询。使用存储过程或函数并避免使用 Stunden 表可能更干净。
    【解决方案2】:

    group_concat怎么样

    SELECT  HOUR( `serverTimeConnected`) as STUNDE, 
            count(`ID`) as HITS,
            group_concat(id) as IDs
    FROM    `connectionLog` 
    GROUP BY HOUR( `serverTimeConnected`)
    

    【讨论】:

    • 只是一个注释。 The result [of group_concat] is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024
    • 我认为这不是问题的答案。
    【解决方案3】:

    【讨论】:

    • 虽然将 OP 指向可能的解决方案可能会有所帮助,但首选相关代码或示例。
    • 很好的论据。但无论如何,这是一个有用的提示!
    猜你喜欢
    • 2021-11-16
    • 2013-05-19
    • 2010-10-31
    • 2016-09-22
    • 2019-02-19
    • 2019-02-14
    • 2015-01-03
    相关资源
    最近更新 更多