Один метод - агрегация:
select diagid, max(astigmatic) as astigmatic
from t
group by diagid;
Это работает, потому что 'yes'
> 'no'
.
Или концептуально подобный метод, но, вероятно, более быстрый в Postgres:
select distinct on (diagid) t.*
from t
order by diagid, astigmatic desc;
Другой подход - or
и not exists
:
select t.*
from t
where t.astigmatic = 'yes' or
(t.astigmatic = 'no' and
not exists (select 1
from t t2
where t2.id = t.id and
t2.astigmatic = 'yes'
)
);
Первые два метода возвращают одну строку на id
- гарантировано. Этот последний метод может вернуть несколько строк, если для данного id
.
имеется несколько
'yes'
с или
'no'
с.