모든 범위 시작을 찾아서 모든 범위 끝을 찾은 다음 올바른 순서로 함께 결합하면됩니다. 여기
이 개념을 보여줍니다 SQLfiddle입니다 :
http://sqlfiddle.com/#!2/6cd35/24
그리고 쿼리를 ...
SELECT oStart.dept_name, oStart.range_start, oEnd.range_end
FROM
(
SELECT strt.dept_name, strt.range_start, @rownum := @rownum + 1 AS rank
FROM
(
SELECT d1.dept_name, d1.range_start, d1.range_end
FROM DepartmentPhoneRanges AS d1
LEFT JOIN DepartmentPhoneRanges AS d2
ON d1.dept_name = d2.dept_name AND d1.range_start = d2.range_end + 1
WHERE d2.dept_name IS NULL
) AS strt
,
(SELECT @rownum := 0) r
ORDER BY dept_name, range_start
) AS oStart
INNER JOIN (
SELECT end.dept_name, end.range_end, @rownum2 := @rownum2 + 1 AS rank2
FROM
(
SELECT d1.dept_name, d1.range_start, d1.range_end
FROM DepartmentPhoneRanges AS d1
LEFT JOIN DepartmentPhoneRanges AS d2
ON d1.dept_name = d2.dept_name AND d1.range_end = d2.range_start - 1
WHERE d2.dept_name IS NULL
) AS end
,
(SELECT @rownum2 := 0) r
ORDER BY dept_name, range_end
) AS oEnd
ON oStart.dept_name = oEnd.dept_name AND oStart.rank = oEnd.rank2
;
NB - (SQL 서버에 존재하므로) MySQL의에서 어떤 ROW_NUMBER() 함수와 내가 사용 그 속임수는 OMG Ponies
'답변에서 this post 스탠드 인으로
연속되는 경우 데이터의 범위가 서로 다른 이유는 무엇입니까? –
@MikeBrant 하나님이 알고 있습니다. 누군가의 유산. –
그것은 단지 데이터베이스의 행입니다. 왜 그 행을 결합하여 수정하지 않습니까? –