Можно так:
SELECT t2.s1
FROM (
SELECT
t1.id,
t1.s1,
IF (@max = 1, @max := t1.seq, @max := @max) AS "max1",
IF (t1.seq = 1, @max := 1, @max := @max) AS "max2"
FROM (
SELECT
(SELECT @id := @id + 1) AS "id",
s1,
IF (s1 = @prev + 1, @seq := @seq + 1, @seq := 1) AS "seq",
(SELECT @prev := s1) AS "prev"
FROM `table`,
(SELECT @id := 0, @seq := 0, @prev := null) AS init
) AS t1,
(SELECT @max := 1) AS init
ORDER BY t1.id DESC
) AS t2
WHERE t2.max1 >= 3
ORDER BY t2.id
Ещё можно добавить в таблицу дополнительный столбец, в котором будет храниться количество записей, принадлежащих к текущей серии последовательных значений и заполнять/обновлять его в триггере, при вставке новых записей в таблицу. Тогда таблица будет выглядеть как-то так:
s1 | n
1 3
2 3
3 3
7 1
12 1
22 2
23 2
5 4
6 4
7 4
8 4
А получение нужных записей будет совсем тривиальным:
SELECT s1 FROM `table` WHERE n > 2