2012-03-26 77 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 

,如果你有相同的市/區組合中的兩個獨立的相鄰組應該甚至不工作。