Rails 寻找距离刚超过 24 小时的实体的查找器方法?
Rails finder method that finds an entity that is just more than 24 hours away?
我正在使用 Rails 5 和 PostgreSQL 9.5。我有一个包含以下列的 table .
cindex=# \d crypto_index_values;
Table "public.crypto_index_values"
Column | Type | Modifiers
------------+-----------------------------+------------------------------------------------------------------
id | integer | not null default nextval('crypto_index_values_id_seq'::regclass)
value | double precision |
index_date | timestamp without time zone | not null
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
给定一个存储在变量 "my_date" 中的时间点(例如“2017-07-29 11:10”),我将如何编写 Rails 查找器查询 return 是单个 Rails 条目,return 是具有最小 "index_date" 且距离 "my_date" 至少 24 小时的行?所以如果我有这个 table 数据
14 | 133.951211424387 | 2017-07-31 19:10:03.235566 | 2017-07-29 19:10:03.267727 | 2017-07-31 19:10:03.267727
15 | 133.951211424387 | 2017-07-31 19:20:03.59569 | 2017-07-28 19:20:03.629418 | 2017-07-31 19:20:03.629418
16 | 139.104155235946 | 2017-07-31 19:30:08.037045 | 2017-07-31 19:30:08.04715 | 2017-07-31 19:30:08.04715
在我的例子中,我希望查询到 return id 为“15”的行,因为 id 为“14”的行距离我的例子不是 24 小时。通常这种查询会起作用
CryptoIndexValue.where('index_date = ?', my_date - 1)
但由于恰好 24 小时后没有条目,所以没有。
您应该结合使用 >
运算符和 order
。
CryptoIndexValue.order(:index_date).find_by('index_date > ?', DateTime.now - 24.hours)
我认为您的示例值不太有效——至少我看不到您如何从具有该索引日期的 table 中选择该值,减去一天。你是说 "the row with the earliest date which is also at least 1 day in the future from my_date" 吗?
CryptoIndexValue.
where('index_date > ?', my_date + 1.days).
order(:my_date, :id).
take
我在排序依据中添加了 :id
,以防您需要在具有相同 index_date
的两行上打平局,但如果由于限制而无法实现,则将其删除。
也许你的意思是减去一天而不是增加一天。
我正在使用 Rails 5 和 PostgreSQL 9.5。我有一个包含以下列的 table .
cindex=# \d crypto_index_values;
Table "public.crypto_index_values"
Column | Type | Modifiers
------------+-----------------------------+------------------------------------------------------------------
id | integer | not null default nextval('crypto_index_values_id_seq'::regclass)
value | double precision |
index_date | timestamp without time zone | not null
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
给定一个存储在变量 "my_date" 中的时间点(例如“2017-07-29 11:10”),我将如何编写 Rails 查找器查询 return 是单个 Rails 条目,return 是具有最小 "index_date" 且距离 "my_date" 至少 24 小时的行?所以如果我有这个 table 数据
14 | 133.951211424387 | 2017-07-31 19:10:03.235566 | 2017-07-29 19:10:03.267727 | 2017-07-31 19:10:03.267727
15 | 133.951211424387 | 2017-07-31 19:20:03.59569 | 2017-07-28 19:20:03.629418 | 2017-07-31 19:20:03.629418
16 | 139.104155235946 | 2017-07-31 19:30:08.037045 | 2017-07-31 19:30:08.04715 | 2017-07-31 19:30:08.04715
在我的例子中,我希望查询到 return id 为“15”的行,因为 id 为“14”的行距离我的例子不是 24 小时。通常这种查询会起作用
CryptoIndexValue.where('index_date = ?', my_date - 1)
但由于恰好 24 小时后没有条目,所以没有。
您应该结合使用 >
运算符和 order
。
CryptoIndexValue.order(:index_date).find_by('index_date > ?', DateTime.now - 24.hours)
我认为您的示例值不太有效——至少我看不到您如何从具有该索引日期的 table 中选择该值,减去一天。你是说 "the row with the earliest date which is also at least 1 day in the future from my_date" 吗?
CryptoIndexValue.
where('index_date > ?', my_date + 1.days).
order(:my_date, :id).
take
我在排序依据中添加了 :id
,以防您需要在具有相同 index_date
的两行上打平局,但如果由于限制而无法实现,则将其删除。
也许你的意思是减去一天而不是增加一天。