Tôi đã viết ra một cách nhanh chóng để làm điều đó. Không chắc điều này là hiệu quả nhất, nhưng hãy hoàn thành công việc. Lưu ý rằng nó không cho bạn biết khoảng trống, nhưng cho bạn biết id trước và sau khoảng trống (hãy nhớ rằng khoảng cách có thể là nhiều giá trị, vì vậy, ví dụ 1,2,4,7,11, v.v.)
Tôi đang sử dụng sqlite làm ví dụ
Nếu đây là cấu trúc bảng của bạn
create table sequential(id int not null, name varchar(10) null);
và đây là những hàng của bạn
id|name
1|one
2|two
4|four
5|five
9|nine
Truy vấn là
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)
hàm vớiOVER (ORDER BY id)
mệnh đề.