Saya menulis cara cepat untuk melakukannya. Tidak yakin ini yang paling efisien, tetapi menyelesaikan pekerjaan. Perhatikan bahwa ini tidak memberi tahu Anda celahnya, tetapi memberi tahu Anda id sebelum dan sesudah celah (perlu diingat bahwa celah itu bisa berupa beberapa nilai, jadi misalnya 1,2,4,7,11 dll)
Saya menggunakan sqlite sebagai contoh
Jika ini adalah struktur tabel Anda
create table sequential(id int not null, name varchar(10) null);
dan ini adalah baris Anda
id|name
1|one
2|two
4|four
5|five
9|nine
Pertanyaannya adalah
select a.* from sequential a left join sequential b on a.id = b.id + 1 where b.id is null and a.id <> (select min(id) from sequential)
union
select a.* from sequential a left join sequential b on a.id = b.id - 1 where b.id is null and a.id <> (select max(id) from sequential);
https://gist.github.com/wkimeria/7787ffe84d1c54216f1b320996b17b7e
LAG(id, 1, null)
fungsi denganOVER (ORDER BY id)
klausa.