Cập nhật
ConfexianMJS đã cung cấp tốt hơn nhiều câu trả lời về hiệu suất.
Câu trả lời (không nhanh nhất có thể)
Đây là phiên bản hoạt động trên bảng có kích thước bất kỳ (không chỉ trên 100 hàng):
SELECT (t1.id + 1) as gap_starts_at,
(SELECT MIN(t3.id) -1 FROM arrc_vouchers t3 WHERE t3.id > t1.id) as gap_ends_at
FROM arrc_vouchers t1
WHERE NOT EXISTS (SELECT t2.id FROM arrc_vouchers t2 WHERE t2.id = t1.id + 1)
HAVING gap_ends_at IS NOT NULL
-
gap_starts_at
- id đầu tiên trong khoảng cách hiện tại -
gap_ends_at
- id cuối cùng trong khoảng trống hiện tại