Vous pouvez essayer ORDER BY (done asc, aux desc)
où aux est calculé avec un CASE
pour donner la priorité ou la date en fonction de la valeur de done
(vous devrez peut-être les convertir dans le même type pour tenir dans la même expression, par exemple, convertir la date en un nombre entier de jours approprié).
Par exemple :
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;