Active Record-如何按日期时间差排序(即按最接近给定日期时间的顺序排序)?

时间:2018-08-02 14:44:47

标签: ruby-on-rails activerecord

假设我想找到一个模型,该模型在给定的日期时间(在14天之内)与给定的日期时间最接近。

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

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

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

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

2 个答案:

答案 0 :(得分:0)

尝试使用import React, { Component } from 'react'; import style from './styles/css/bootstrap.css'; class App extends Component { render() { return ( <div> <button className={style['btn', 'btn-primary']}>test button</button> </div> ); } } export default App; created_at的绝对值:

dt

答案 1 :(得分:0)

有了适当的警告,在插入原始SQL片段时需要非常小心,您应该可以使用:

query.order("CASE WHEN created_at > #{dt} THEN created_at - #{dt} ELSE #{dt} - created_at END")

(上次我检查过,由于种种原因,PostgreSQL没有提供abs(interval)函数。)