【问题标题】:How to sort table in ecto based on two columns如何根据两列对ecto中的表进行排序
【发布时间】:2020-08-03 20:55:46
【问题描述】:

我有带有timeoperation 列的表格。操作列包含createupdatedelete值,时间有elixir utc datetime。我想根据日期时间进行排序,如果基于相同的时间戳存在多行,我想首先取 delete 行,然后是 createupdate

错误:

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相关的值应该最后出现。

如果我们使用以下查询执行此操作,它将始终接受“删除”作为第一个值,但不会对 updatecreate 行进行排序。我很想知道我们是否可以以某种方式扩展此查询中片段的使用,以根据所有 createupdatedelete 字段进行排序。

     |> order_by([e],
       asc: e.time,
       desc: e.operation == "delete"
      )

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    你可以试试这个(如果你使用 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 multiple values in specific order?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多