Du kan prova ORDER BY (done asc, aux desc)
där aux beräknas med ett CASE
för att ge antingen prioritet eller datum baserat på värdet för done
(du kan behöva casta dem till samma typ för att passa in i samma uttryck, t.ex. casta datumet till ett lämpligt heltalsdagnummer).
Till exempel:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;