首页 > 解决方案 > Active Record - 如何按日期时间的差异排序(即按最接近给定日期时间的顺序排序)?

问题描述

假设我想找到一个与给定日期时间最接近的 created_at 模型,在某些限制内(例如,在 14 天内)。

dt = some_datetime_in_the_past
query = Model.where("created_at >= ? AND created_at <= ?", dt - 7.days, dt + 7.days)

这将获得在 7 天内创建的所有模型dt。然后我想找到最接近 dt 的模型。所以是这样的:

query.order("created_at - #{dt}")

显然这不起作用,否则我不会在这里,但我想实现这样的目标。显然 created_at 的常规订单不起作用,因为它只会找到最接近/最远的现在,而不是给 given dt

标签: ruby-on-railsactiverecord

解决方案


created_at尝试使用and的绝对值dt

.order("abs(created_at - #{dt})")


推荐阅读