给定这样的数据集;
+-----+---------------------+--------+
| 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天的记录对结果进行分组。上述结果是实时数据的一部分,表中有超过100,000个结果行并且其增长。基本上我想测量随时间的变化,所以想要对每个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个结果拆分数据。假设没有空行是安全的。
使用您可以执行多项选择的数据执行上述操作;
SELECT SUM(result) FROM table LIMIT 0,5;
SELECT SUM(result) FROM table LIMIT 5,5;
SELECT SUM(result) FROM table LIMIT 10,5;
这显然不是扩大到更大问题的好方法。我可以写一个循环,但我想减少查询次数。
答案 0 :(得分:4)
您可以在ROW NUMBER上使用整数除法来执行此操作。
如果您认为您的id
列是连续的,请使用:GROUP BY FLOOR(id / 5)
答案 1 :(得分:4)
怎么样......
SELECT
floor(id / 5) ym,
COUNT(result) 'Total Games',
SUM(result) as 'Score'
FROM nn_log
GROUP BY ym;
(我假设id是相关的)
在您的查询中,这是相同的想法,只使用ID来分组而不是当天。
答案 2 :(得分:0)
按年份分组(your_date),星期(your_date)
将按7天的间隔进行分组,这可能对您有用。