【问题标题】:PostgreSQL in Rails: sorting object by two date attributes in descending orderRails中的PostgreSQL:按两个日期属性降序排序对象
【发布时间】:2016-02-24 02:35:38
【问题描述】:

我有一个活跃职位的索引。目前,它们按最新的排序,即created_at。但是,最近我添加了一个更新功能,可以更新renewal_date 属性而不更新created_at

我想要实现的是同时使用renewal_datecreated_at 对列表进行降序排序。

jobs = Job.where(active: true).reorder("renewal_date DESC NULLS LAST", "created_at DESC")

使用此代码,无论创建了多少新工作,更新的工作都将始终位于顶部。如何对其进行排序,以便检查两个属性的日期并根据最近的日期对其进行排序?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql sorting activerecord


    【解决方案1】:

    您的代码将首先按renewal_date 排序,最后为null,然后如果两条记录具有相同的renewable_date,则查看created_at。

    我假设您想要做的是“max(renewal_date, created_at)”之类的东西,它将采用“最后修改日期”或其他自定义方式来比较两个字段。 如果是这样,您可以在这里找到答案:merge and order two columns in the same model

    Job.where(active: true).reorder('GREATEST(renewal_date, created_at) DESC')
    

    【讨论】:

    • 感谢您的链接。这对我帮助很大!
    【解决方案2】:

    让我们尝试一个标准的 SQL,让它适用于所有类型的数据库:

    Job.where(active: true).order('CASE WHEN renewal_date IS NULL THEN created_at ELSE renewal_date END DESC')
    

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多