我有下表
tbl
|city| district| start_num| end_num|
|a |b |10 |19|
|a |b |20 |29|
|a |b |30 |33|
|c |d |34 |40
|c |d |41 |59|
|c |d |70 |100|
我想要另一个表格,考虑到我合并了行: 同一个城市和地区以及范围起点MUSS是连续的。
tbl_res should be
|city |district |start_num |end_num|
|a |b |10 |33|
|c |d |34 |59|
|c |d |70 |100|
这个想法是消除与另一行的范围是连续的行,其中一行具有更大的连续范围。
也许循环浏览php?
答案 0 :(得分:0)
好的,我想我已成功解决了这个问题。假设没有任何范围重叠,我认为这有效:
SET @group = 1, @current:= 0;
SELECT city,district,MIN(start_num),MAX(end_num) FROM (
SELECT
*,
IF((start_num-@current)=1,(@group),(@group:=@group+1)) AS contiguent_group,
@current:=end_num
FROM `testtable`) AS contiguous
GROUP BY city,district,contiguent_group
如果你在同一个城市/地区组合中有两个独立的连续小组,它甚至可以工作。