У меня есть таблица со столбцами time
и operation
. Столбец операции включает значения create
, update
и delete
, а время имеет elixir ut c datetime. Я хочу отсортировать по дате и времени, и если несколько строк представлены на основе одной и той же метки времени, я хочу сначала взять delete
строк, а затем create
и затем update
.
Неправильно:
1. { time: TIME1, operation: "create" }
2. { time: TIME1, operation: "delete" }
3. { time: TIME1, operation: "update" }
Правильно
1. { time: TIME1, operation: "delete" }
2. { time: TIME1, operation: "create" }
2. { time: TIME1, operation: "update" }
Таким образом, он всегда будет отдавать приоритет delete
, а чем create
будет выбран, и значения, связанные с update
, должны появиться наконец.
Если мы сделаем это ecto, используя следующий запрос, где он всегда будет принимать «удалить» в качестве первого значения, но не будет сортировать update
и create
строки. Мне любопытно узнать, можем ли мы как-то расширить использование фрагментов в этом запросе, чтобы сортировка была основана на всех полях create
, update
и delete
.
|> order_by([e],
asc: e.time,
desc: e.operation == "delete"
)