Я думаю, оконные функции.Вот правила, которые вы описываете:
select t.*
from (select t.*,
row_number() over (partition by doc, doc_id order by doc_id) as seqnum,
count(*) over (partition by doc) as cnt
from t
) t
where seqnum = 1 and cnt >= 2;
Я думаю, что это те правила, которые вы хотите:
select t.*
from (select t.*,
row_number() over (partition by doc, doc_id order by doc_id) as seqnum,
count(distinct doc_id) over (partition by doc) as cnt
from t
) t
where seqnum = 1 and cnt >= 2;