Ruby on rails Rails中的PostgreSQL:按两个日期属性降序排序对象

Ruby on rails Rails中的PostgreSQL:按两个日期属性降序排序对象,ruby-on-rails,ruby,postgresql,sorting,activerecord,Ruby On Rails,Ruby,Postgresql,Sorting,Activerecord,我有一个活跃工作职位的索引。目前,它们是按最新的排序的,即在处创建的。但是,最近我添加了一个续订功能,它更新了续订日期属性,而不更新在处创建的 jobs = Job.where(active: true).reorder("renewal_date DESC NULLS LAST", "created_at DESC") 我想要实现的是使用续订日期和创建日期对列表进行降序排序 jobs = Job.where(active: true).reorder("renewal_date DESC N

我有一个活跃工作职位的索引。目前,它们是按最新的排序的,即在处创建的
。但是,最近我添加了一个续订功能,它更新了
续订日期
属性,而不更新在
处创建的

jobs = Job.where(active: true).reorder("renewal_date DESC NULLS LAST", "created_at DESC")
我想要实现的是使用
续订日期
创建日期
对列表进行降序排序

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

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

您的代码将首先按续订日期排序,最后为空,然后查看创建的日期,看两条记录是否具有相同的续订日期

我假设您想要做的是“max(续订日期,创建日期)”之类的事情,它将采用“上次修改日期”或另一种自定义方式来比较这两个字段。 如果是这样,您可以在此处找到答案:


您的代码将首先按续订日期排序,末尾为空,然后查看创建的两条记录是否具有相同的续订日期

我假设您想要做的是“max(续订日期,创建日期)”之类的事情,它将采用“上次修改日期”或另一种自定义方式来比较这两个字段。 如果是这样,您可以在此处找到答案:


让我们试试标准SQL,这样它就可以处理所有类型的数据库:

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

让我们试试标准SQL,这样它就可以处理所有类型的数据库:

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

谢谢你的链接。这对我帮助很大!谢谢你的链接。这对我帮助很大!