1

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

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,所以我需要获取 3 条具有今天日期(2013-02-10 11:00:002013-02-10 12:00:002013-02-10 13:00:00)的记录,但例如如果今天是2013-02-15,我需要获取最接近的 3 条记录,在这种情况下是2013-02-10 13:00:002013-02-11 14:00:00并且2013-02-11 22:00:00

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

谢谢

4

2 回答 2

1

假设您使用的是 ActiveRecord 对吗?

此查询将获取过去最接近“现在”的三个日期:

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然后我会遍历每一个,并比较变量中每条记录之间经过了多少时间。

无论哪三个具有最小的时间差,将它们添加到您的最终数组中。

于 2013-02-26T23:40:53.900 回答
0

这将使 3 关闭到特定时间,我在您的目标日期使用中午。这将确保今天的结果领先于其他任何一天。

TableObjectName.all(order: "abs(timediff('2013-02-10 12:00:00', date_column))", limit: 3).
于 2013-02-27T01:39:30.170 回答