我在一个MySQL服务器中有一些数据,索引号从0到15,还有两个包含名称和地址的字段。
Name Address Index
----- ------- --
Test 0x0100 0
Test 0x0100 1
Test 0x0100 2
Test 0x0100 3
Test 0x0100 4
Test2 0x0100 5
Test2 0x0100 6
Test2 0x0100 7
Test 0x0100 8
Test 0x0100 9
Test 0x0100 10
Test3 0x0100 11
Test3 0x0100 12
Test 0x0100 13
Test 0x0100 14
Test 0x0100 15
数据按地址排序,然后按索引排序。
当每个索引如下所示时,我想用索引的范围来总结这些数据:
Name Address Start End
----- ------- ----- ----
Test 0x0100 0 4
Test2 0x0100 5 7
Test 0x0100 8 10
Test3 0x0100 11 12
Test 0x0100 13 15
在mysql中有这样做的方法吗?或者,是否有一个有效的算法来实现这一点,而不是暴力?查询返回后可能会进行一些后期处理。
最佳答案
可以在MySQL中使用变量执行此操作:
select name, address, min(index) as start_index, max(index) as end_index
from (select t.*,
(@grp := if(@name = name, @grp,
if(@name := name, @grp + 1, @grp + 1)
)
) as grp
from t cross join
(select @grp := 0, @name := '') params
order by index
) t
group by name, address, grp;
这是一个工作版本。