Je zou kunnen proberen ORDER BY (done asc, aux desc)
waarbij aux wordt berekend met een CASE
om prioriteit of datum te geven op basis van de waarde van done
(het kan zijn dat u ze naar hetzelfde type moet casten om in dezelfde uitdrukking te passen, bijv. de datum casten naar een geschikt geheel getal voor de dag).
Bijvoorbeeld:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;