(1) Как вы определяете «первую» строку для группы? Я предполагаю, что это строка с наименьшим стартовым номером для этой ветви.
(2) Если есть галстук, например, скажем, для вашей группы М, есть 2 строки с одинаковым стартовым номером, но другой конечный номер. Будет ли диапазон соответствовать значению начала и конца строки, имеющей наивысшее конечное значение, или наименьшее конечное значение?
Ответ на вопрос № 2 выше важен, поэтому я дам вам sql для обоих.
Если вы хотите самую низкую END_NUM где есть 2+ строки в той же отрасли с тем же START_NUM
with boundaries as(
select id, branch, start_num, end_num
from tbl y
where start_num = (select min(x.start_num) from tbl x where x.branch = y.branch)
and end_num = (select min(x.end_num) from tbl x where x.branch = y.branch and x.start_num = y.start_num)
)
select x.*
from tbl x join boundaries y on x.branch = y.branch
where x.start_num >= y.start_num
and x.end_num <= y.end_num
Если вы хотите высокий END_NUM где есть 2+ строки в одной и той же ОТРАСЛИ с тем же START_NUM
with boundaries as(
select id, branch, start_num, end_num
from tbl y
where start_num = (select min(x.start_num) from tbl x where x.branch = y.branch)
and end_num = (select max(x.end_num) from tbl x where x.branch = y.branch and x.start_num = y.start_num)
)
select x.*
from tbl x join boundaries y on x.branch = y.branch
where x.start_num >= y.start_num
and x.end_num <= y.end_num
Что вы имеете в виду под «первой строкой группы»? Вы имеете в виду тот, у кого самый низкий «START_NUM»? –
Почему бы не «987» быть в результирующем наборе? –