我有表time
和operation
列。“操作”列包括create
,update
并且delete
值和时间具有utc datetime。我想基于日期时间进行排序,并且如果基于同一时间戳存在多个行,我想首先获取delete
行andcreate
和and than 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"
)
您可以尝试以下操作(如果使用postgres):
|> order_by([e],
asc: e.time,
asc: fragment("CASE ? WHEN 'delete' THEN 1 WHEN 'create' THEN 2 WHEN 'update' THEN 3 END", e.operation)
)
有关这种排序的详细信息,请参见:sql ORDER BY特定顺序的多个值?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句