Предполагая, что текущий / предыдущий уникален для каждого идентификатора:
select id
from tab
group by id
having min(previous_stage) <> 2 -- doesn't start with 2
or max(current_stage) - 2 <> count(*) -- there's at least one missing stage
Edit:
Применить distinct
, если previous_stage
не является уникальным в id
:
select id
from tab
group by id
having min(previous_stage) <> 2 -- doesn't start with 2
or max(current_stage) - 2 <> count(distinct previous_stage) -- there's at least one missing stage
Edit:
Мои предыдущие запросы имели неверную логику, это должно было быть or
вместо and
.
Это должно соответствовать вашим требованиям:
select id
from tab
group by id
having not
-- these are the correct ids
( min(previous_stage) = 2 -- start with 2
and max(current_stage) - min(previous_stage) = count(distinct previous_stage) -- no missing steps
and max(previous_stage) = max(current_stage) -1 -- no greater step
)