3
CREATE TABLE `connectionLog` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `serverTimeConnected` datetime NOT NULL,
  `serverTimeDisconnected` datetime  NOT NULL,
  PRIMARY KEY (`ID`)
);

このクエリでは、serverTimeConnected が 1 時間のすべての 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
4

3 に答える 3

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

于 2013-10-25T14:53:05.313 に答える
0

どうですかgroup_concat

SELECT  HOUR( `serverTimeConnected`) as STUNDE, 
        count(`ID`) as HITS,
        group_concat(id) as IDs
FROM    `connectionLog` 
GROUP BY HOUR( `serverTimeConnected`)
于 2013-10-25T12:40:02.493 に答える
-1

TIMEDIFF をご覧ください。

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff

于 2013-10-28T14:38:28.007 に答える