我有一份活跃的工作岗位索引。目前,他们按最新的created_at
进行排序。不过,最近我添加了续订功能,更新renewal_date
属性而不更新created_at
。
我想要实现的是使用renewal_date
和created_at
按降序对列表进行排序。
jobs = Job.where(active: true).reorder("renewal_date DESC NULLS LAST", "created_at DESC")
使用此代码,无论创建了多少个新作业,更新的作业将始终位于顶部。如何对其进行排序,以便检查两个属性的日期并根据最近的属性对其进行排序?
答案 0 :(得分:3)
您的代码将首先通过renewal_date订购,最后使用空值,然后如果两个记录具有相同的renewal_date,则会查看created_at。
我认为您想要做的事情就像" max(renewal_date,created_at)"这将采用"最后修改日期"或其他自定义方式进行比较这两个领域。 如果那时,您可以在此处找到答案:drop down
Job.where(active: true).reorder('GREATEST(renewal_date, created_at) DESC')
答案 1 :(得分:1)
尝试使用标准SQL,因此它可以适用于所有类型的数据库:
Job.where(active: true).order('CASE WHEN renewal_date IS NULL THEN created_at ELSE renewal_date END DESC')