【问题标题】:Find records that were created closest to the current date查找最接近当前日期创建的记录
【发布时间】:2012-09-06 06:37:35
【问题描述】:

我想获取其created_at 日期最接近当前日期的记录。如何使用活动记录的 where 子句做到这一点?

【问题讨论】:

    标签: activerecord ruby-on-rails-3.2


    【解决方案1】:

    您可以通过以下方式找到过去最接近的记录:

    Record.where("created_at <= ?", Date.today).order_by("created_at DESC").limit(1)
    

    同样,你可以在未来拥有最接近的记录

    Record.where("created_at >= ?", Date.today).order_by("created_at ASC").limit(1)
    

    然后比较最接近当前日期的那个...

    可能有一个解决方案可以通过单个请求来完成,但我找不到方法(如果您使用的是 SQL 服务器,有一种方法 DATEDIFF 可以提供帮助)。

    更新感谢米沙

    如果您确定所有 created_at 都已过去,则您正在查看最后创建的记录,该记录可以写入

    Record.order("created_at").last
    

    更新

    要让所有记录的创建日期与最后一条记录相同:

    last_record_date = Record.max(:created_at)
    Record.where(:created_at => (last_record_date.at_beginning_of_day)..(last_record_date.end_of_day))
    

    【讨论】:

    • 理论上将来可能会有created_date,但如果你使用Rails的自动时间戳就不会发生。所以你可以省略where 子句。使用order_by("created_at DESC") 就足够了。
    • @Mischa 你说的太对了!我写了答案,认为它可以是任何日期,并在我再次阅读问题时更改为created_at,而不认为它简化了解决方案。谢谢。
    • 谢谢 Baldrick 我正在考虑获取最接近今天日期的记录,而不是对它们进行排序而是过滤它们。所以类似于 MIN(Date(created_at) - Date.today)。明白我的意思吗?
    • @chell 我已经更新了我的答案,让所有记录的创建日期与最后一条记录相同。
    • 谢谢,这正是我所需要的。我已经接受了你的回答并补充了一点。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    相关资源
    最近更新 更多