Sort by multiple columns

For information, I managed to do combined sort (with asc, desc).

In my case below, achieving priority ASC + journal-day DESC, by reversing result (at first reverse priority alphabet, then last reserve once again.)

#+BEGIN_QUERY
{:title "TODO (latest 30)"
 :query (todo TODO)
 :result-transform (fn [result]
  (let [rev-pri (fn [p] (case p "A" "Z" "B" "Y" "C" "X" "Z" "B" "A"))]
   (->> result
    (sort-by (fn [r]
        [
          (rev-pri (get r :block/priority "Z"))
          (get (get r :block/page) :block/journal-day 19000101)
        ]
     ))
    reverse
    (take 30)
    ;; ;; for debug dates (by returning :journal-day)
    ;; (map (fn [m] (update m :block/properties
    ;;   (fn [u]
    ;;      (assoc u
    ;;           :journal-day (get (get m :block/page) :block/journal-day)
    ;;       )
    ;;   ))))
    )))
 :breadcrumb-show? false
}
#+END_QUERY

In this case, journal-day is unsigned int, so you can use below as alternative:

(sort-by (fn [r]
    [
      (get r :block/priority "Z")
      (- (get (get r :block/page) :block/journal-day 19000101))
    ]
 ))

;; without reverse

But I think this is special case which combined sort can be done with ease, so it’s ideal if there is multiplex sort function as default.