Hai davvero due tipi in uno sulla tua ultima query. I genitori possono ordinare in ordine crescente o decrescente, ma i bambini possono solo ordinare in ordine crescente.
Dopo aver esaminato questo, credo che tu possa ottenere una soluzione con qualcosa del genere.
order by case
when depth = 0
then path
/*
secret function that always returns the
right numbers regardless of whether or not the sort is ascending.
*/
else XXX_function('DESC', path)
end desc;
Credo che la logica sia corretta, ma devi capire come sostituire i numeri negli ordinamenti decrescenti poiché le cose saranno "sottosopra". (Forse invertire le posizioni dell'array)