Nie znając wszystkich reguł biznesowych innych niż te, które podałeś, oto bardziej ogólne rozwiązanie.
Utwórz kolejną tabelę (lub być może Twój model danych już ją posiada) z możliwymi statusami w niej:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
Ta tabela służy do uszeregowania statusów w kolejności pierwszeństwa. Innymi słowy, jeśli w przypadku duplikatów należy wybrać opcję „Wniosek o zrzeczenie się” zamiast „Odrzucono”, należy zastosować pierwszeństwo 1 w przypadku zwolnień i 2 w przypadku odrzucenia.
Więc teraz zapytanie może skorzystać z tej dodatkowej tabeli rankingowej:
SELECT b.docid, r.status
FROM b,
status_rank r,
(SELECT b.id, min(r.rank)
FROM b, status_rank r
WHERE b.status = r.status
GROUP BY id) s
WHERE b.docid = s.docid
AND r.rank = s.rank
AND b.status = r.status;
Istnieje wiele sposobów na wykonanie zapytania, ale powinno to pokazać ogólną ideę.