我在数据库中存储了这样的记录:
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:00
,2013-02-10 12:00:00
,2013-02-10 13:00:00
)获取3条记录,但是例如,如果今天是2013-02-15
,我需要获得最接近的3条记录,在这种情况下是2013-02-10 13:00:00
,2013-02-11 14:00:00
和2013-02-11 22:00:00
?
请问你能帮帮我,怎么做?
谢谢
答案 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).