Můžete zkusit ORDER BY (done asc, aux desc)
kde aux je vypočítán s CASE
získat prioritu nebo datum na základě hodnoty done
(možná je budete muset přetypovat na stejný typ, aby se vešly do stejného výrazu, např. přehodit datum na vhodné celé číslo dne).
Například:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;