Oto rozwiązanie wykorzystujące LAG
funkcji lub Oracle, co daje dostęp do poprzedniego wiersza.
I powinieneś pobrać tylko wiersze 2 i 5 ze swojej tabeli, zgodnie z Twoimi wymaganiami, ponieważ wiersz 6 ma end_no
jako 224, czyli nie mniej niż end_no
z row5, czyli 223
SELECT id, name, start_no, end_no
FROM (
SELECT id, name, start_no, end_no,
lag(start_no, 1, 0) over (order by id) prev_start_no ,
lag(end_no, 1, 0) over (order by id) prev_end_no
FROM test
)
WHERE start_no BETWEEN prev_start_no AND prev_end_no
AND end_no BETWEEN prev_start_no AND prev_end_no;