Я написал это до того, как увидел тег Oracle.В MySQL возникли проблемы с временными таблицами, может быть, вы можете избежать дополнительных функций в Oracle?
CREATE TEMPORARY TABLE tmp_sequence (
IDSeq INT NOT NULL AUTO_INCREMENT, range_id VARCHAR(3), range_start CHAR(1), range_end CHAR(1), origin CHAR(1), destination CHAR(1), PRIMARY KEY (IDSeq)
);
INSERT INTO tmp_sequence (range_id, range_start, range_end)
VALUES ('ABC', 'X', 'Y'), ('ABC', 'Y', 'H'), ('ABC', 'H','L'), ('ABC','L', 'G'),
('BCD','Q','D'), ('BCD','D','H'),('BCD','H','Z');
CREATE TEMPORARY TABLE tmp_min AS
SELECT MIN(IDSeq) min_id, range_id
FROM tmp_sequence
GROUP BY range_id;
CREATE TEMPORARY TABLE tmp_start AS
SELECT s.min_id, s.range_id, t.range_start
FROM tmp_sequence t
JOIN tmp_min s ON t.IDSeq = s.min_id
AND t.range_id = s.range_id;
UPDATE tmp_sequence t
JOIN tmp_start s ON t.range_id = s.range_id
SET origin = s.range_start;
CREATE TEMPORARY TABLE tmp_max AS
SELECT MAX(IDSeq) max_id, range_id
FROM tmp_sequence
GROUP BY range_id;
CREATE TEMPORARY TABLE tmp_end AS
SELECT s.max_id, s.range_id, t.range_end
FROM tmp_sequence t
JOIN tmp_max s ON t.IDSeq = s.max_id
AND t.range_id = s.range_id;
UPDATE tmp_sequence t
JOIN tmp_end s ON t.range_id = s.range_id
SET destination = s.range_end;
DROP TEMPORARY TABLE tmp_sequence;
DROP TEMPORARY TABLE tmp_min;
DROP TEMPORARY TABLE tmp_start;
DROP TEMPORARY TABLE tmp_end;