Możesz spróbować ORDER BY (done asc, aux desc)
gdzie aux jest obliczane z CASE
aby uzyskać priorytet lub datę na podstawie wartości done
(może być konieczne rzutowanie ich na ten sam typ, aby pasowały do tego samego wyrażenia, np. rzutuj datę na odpowiednią liczbę całkowitą).
Na przykład:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;