2012-03-26 63 views
1

之间的操作合并在MySQL行我有以下表如何基于列

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

我不太明白你想达到什么。你能否更详细地解释你的预期结果?为什么“a,b”配对崩溃到一个结果,但“c,d”崩溃到两个? – liquorvicar 2012-03-26 20:16:29

+0

我编辑了这个例子。我想要的是只添加同一对城市/地区连续的范围,即对于a-b:10-20 + 21-30 + 31-33。对于CD我只能加入2个第一范围:34-40 + 41-59但不是70-100,因为我将在范围内有一个“洞”60-69 – user1293872 2012-03-26 21:08:05

+0

您有多少行/期望在包含所有数据(预处理)的表格? – lethalMango 2012-03-26 21:11:28

回答

0

好吧,我想我已经设法解决了这个问题。假设没有范围的重叠,我想这样的作品:

SET @group = 1, @current:= 0; 
SELECT city,district,MIN(start_num),MAX(end_num) FROM (
    SELECT 
    *, 
    IF(([email protected])=1,(@group),(@group:[email protected]+1)) AS contiguent_group, 
    @current:=end_num 
    FROM `testtable`) AS contiguous 
GROUP BY city,district,contiguent_group 

,如果你有相同的市/区组合中的两个独立的相邻组应该甚至不工作。