Таблицы SQL представляют неупорядоченные наборы. Строка «предыдущая» или «следующая» отсутствует, если только в столбце не указан порядок.
Похоже, в ваших данных такой колонки нет. Но если бы вы сделали, вы могли бы использовать lag()
:
select record_id, count(*)
from (select t.*,
lag(status) over (partition by record_id order by <ordering column>) as prev_status
from t
) t
where status = 1 and prev_status in (3, 4)
group by record_id;