2009-07-11 61 views
0

給定一個這樣的數據集;GROUP BY ID範圍?

+-----+---------------------+--------+ 
| id | date    | result | 
+-----+---------------------+--------+ 
| 121 | 2009-07-11 13:23:24 |  -1 | 
| 122 | 2009-07-11 13:23:24 |  -1 | 
| 123 | 2009-07-11 13:23:24 |  -1 | 
| 124 | 2009-07-11 13:23:24 |  -1 | 
| 125 | 2009-07-11 13:23:24 |  -1 | 
| 126 | 2009-07-11 13:23:24 |  -1 | 
| 127 | 2009-07-11 13:23:24 |  -1 | 
| 128 | 2009-07-11 13:23:24 |  -1 | 
| 129 | 2009-07-11 13:23:24 |  -1 | 
| 130 | 2009-07-11 13:23:24 |  -1 | 
| 131 | 2009-07-11 13:23:24 |  -1 | 
| 132 | 2009-07-11 13:23:24 |  -1 | 
| 133 | 2009-07-11 13:23:24 |  -1 | 
| 134 | 2009-07-11 13:23:24 |  -1 | 
| 135 | 2009-07-11 13:23:24 |  -1 | 
| 136 | 2009-07-11 13:23:24 |  -1 | 
| 137 | 2009-07-11 13:23:24 |  -1 | 
| 138 | 2009-07-11 13:23:24 |  1 | 
| 139 | 2009-07-11 13:23:24 |  0 | 
| 140 | 2009-07-11 13:23:24 |  -1 | 
+-----+---------------------+--------+ 

我該如何去關於第5天記錄的分組結果。上述結果是實時數據的一部分,表中有超過10萬個結果行,並且它在不斷增長。基本上我想測量隨着時間的變化,所以想要每個X記錄取得結果的總和。在真實數據中,我會做到100或1000,但對於上面的數據可能每5個。

如果我可以按日期排序,我會做這樣的事情;

SELECT 
    DATE_FORMAT(date, '%h%i') ym, 
    COUNT(result) 'Total Games', 
    SUM(result) as 'Score' 
FROM nn_log 
GROUP BY ym; 

我無法弄清楚用數字做類似的事情。訂單按日期排序,但我希望將每個x結果的數據分開。假設沒有空白行是安全的。

用你可以做的多個數據做以上操作選擇like;

SELECT SUM(result) FROM table LIMIT 0,5; 
SELECT SUM(result) FROM table LIMIT 5,5; 
SELECT SUM(result) FROM table LIMIT 10,5; 

這顯然不是一個很好的方法來擴大到一個更大的問題。我可以只寫一個循環,但我想減少查詢的數量。

回答

4

......怎麼

SELECT 
    floor(id/5) ym, 
    COUNT(result) 'Total Games', 
    SUM(result) as 'Score' 
FROM nn_log 
GROUP BY ym; 

(我假設的ID是相關)

這與您的查詢中的想法相同,只使用ID來代替當天的組。

+0

非常感謝。 有趣的是,這樣做給了我第一個只有999 ...但我可以忍受。 的mysql> SELECT - >地板(ID/1000)YM, - > COUNT(結果) '總遊戲', - > SUM(結果)爲 '分數' - >從nn_log - > GROUP BY YM ; + ------ + ------------- + ------- + | ym |總遊戲|分數| + ------ + ------------- + ------- + | 0 | 999 | -879 | | 1 | 1000 | -889 | | 2 | 1000 | -920 | | 3 | 1000 | -903 | .... – 2009-07-11 15:13:49

4

你可以在ROWNUMBER上使用整數除法來做到這一點。

如果您確定您的id列consecuitive只需使用:GROUP BY FLOOR(ID/5)

0

組由年(your_date),周(your_date)

,將7天的間隔組這可能會爲你工作。