2013-10-25 149 views
3
CREATE TABLE `connectionLog` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `serverTimeConnected` datetime NOT NULL, 
    `serverTimeDisconnected` datetime NOT NULL, 
    PRIMARY KEY (`ID`) 
); 

使用此查詢我得到serverTimeConnected在一小時內的所有ID。GROUP BY日期範圍

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 

回答

0

如何group_concat

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

只是一個音符。 '[group_concat]的結果被截斷爲由group_concat_max_len系統變量給出的最大長度,默認值爲1024' –

+1

我認爲這不是問題的答案。 –

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

+0

謝謝,INNER JOIN是一個很酷的主意! – user2919923

+0

[http://sqlfiddle.com/#!2/3a1ab/1/0](http://sqlfiddle.com/#!2/3a1ab/1/0)的作品。但我有其他問題:serverTimeConnected =「2013-08-20 23:00:00」和serverTimeDisconnected =「2013-08-21 01:10:00」 – user2919923

+0

我已經更新了答案。請注意,這是一個簡單的查詢。也許更清潔使用商店程序或功能,並避免表格Stunden。 –