Rails - 如何根据日期从数据库中获取最接近的记录?

时间:2013-02-26 23:32:57

标签: sql ruby-on-rails ruby date

我在数据库中存储了这样的记录:

ID| date_column
1 | 2013-02-10 10:00:00
2 | 2013-02-10 11:00:00
3 | 2013-02-10 12:00:00
4 | 2013-02-10 13:00:00
5 | 2013-02-11 14:00:00
6 | 2013-02-11 22:00:00

我正在尝试获取3条记录,这些记录与今天的日期最接近。例如,我们假设今天是2013-02-10,因此我需要使用今天的日期(2013-02-10 11:00:002013-02-10 12:00:002013-02-10 13:00:00)获取3条记录,但是例如,如果今天是2013-02-15,我需要获得最接近的3条记录,在这种情况下是2013-02-10 13:00:002013-02-11 14:00:002013-02-11 22:00:00

请问你能帮帮我,怎么做?

谢谢

2 个答案:

答案 0 :(得分:1)

假设你正在使用ActiveRecord吗?

此查询会在过去中抓取三个最接近“now”的日期:

time_to_check = Time.now
TableObjectName.where("date_column <= ?", time_to_check ).limit(3).order("date_column desc")

此查询将在将来中抓取三个最接近“现在”的日期:

TableObjectName.where("date_column >= ?", time_to_check ).limit(3).order("date_column desc")

我唯一能想到的东西,这似乎效率低下,但我想不出一种SQL方法,你现在有两个基本上有六个记录的数组。

将来三个(如果有的话) 过去三次(如果有的话)。

然后我遍历每个并比较timeToCheck变量中每条记录之间经过的时间。

无论哪三个都有最小的时差,请将它们添加到最终阵列中。

答案 1 :(得分:0)

这将使特定时间的3次关闭,我在目标日中午使用。这将确保今天的结果提前一天。

TableObjectName.all(order: "abs(timediff('2013-02-10 12:00:00', date_column))", limit: 3).