Sie könnten ORDER BY (done asc, aux desc)
versuchen wobei aux mit einem CASE
berechnet wird um entweder Priorität oder Datum basierend auf dem Wert von done
zu liefern (Möglicherweise müssen Sie sie in denselben Typ umwandeln, damit sie in denselben Ausdruck passen, z. B. das Datum in eine geeignete ganzzahlige Tageszahl umwandeln).
Zum Beispiel:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;