我在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中执行此操作?或者,除了暴力之外,还有一种有效的算法来实现这一目标吗?查询返回后,可以进行一些后期处理。
答案 0 :(得分:2)
您可以使用变量在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;
这是一个工作版本。