ORDER BY (done asc, aux desc)を試すことができます ここで、auxはCASEで計算されます doneの値に基づいて優先度または日付を生成します (同じ式に収まるように、同じタイプにキャストする必要がある場合があります。たとえば、日付を適切な整数の日数にキャストします)。
例:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;