Как объединить строки в MySQL на основе операции между столбцами - PullRequest
1 голос
/ 27 марта 2012

У меня есть следующая таблица

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?

1 Ответ

0 голосов
/ 27 марта 2012

Хорошо, я думаю, мне удалось это решить.Предполагая, что ни один из диапазонов не перекрывается, я думаю, что это работает:

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

Это должно даже работать, если у вас есть две отдельные смежные группы в одной комбинации города / района.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...