如题 只能用sql的方式
有下面一堆数
0
1
1
2
3
8
9
10
12
15
18
按数差为3分组
结果是
0
1
1
2
3
8
9
10
12
15
18
这样分成四组
其中第二组从8开始分 相当于第二组的最开始一个数,以此类推来分组
用sql的形式 有好的解题思路吗
最好能直接给sql代码或者伪代码
求大神解答
测试数据:
CREATE TABLE `tb_id` (
`id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
root test>select * from tb_id;
+----+
| id |
+----+
| 0 |
| 1 |
| 1 |
| 2 |
| 3 |
| 8 |
| 9 |
| 10 |
| 12 |
| 15 |
| 18 |
+----+
结论:
root test>SELECT @id:=(if(id-@id>3,id,@id)) as group_no, id FROM `tb_id`,(select @id:=-10)t;
+----------+----+
| group_no | id |
+----------+----+
| 0 | 0 |
| 0 | 1 |
| 0 | 1 |
| 0 | 2 |
| 0 | 3 |
| 8 | 8 |
| 8 | 9 |
| 8 | 10 |
| 12 | 12 |
| 12 | 15 |
| 18 | 18 |
+----------+----+
说明:tb_id表的id要递增,没有的话要先排序;(select @id:=-10)t
里面的-10可随意定义,只要比tb_id中的min(id)小于3即可。