2009-07-11 63 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天的间隔组这可能会为你工作。