2017-08-07 14 views
0

私はRails 5とPostgreSQL 9.5を使用しています。私は次の列のテーブルを持っています。24時間以上離れたエンティティを検出するRails finderメソッド?

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 

時点を考えると、私は返す単一Railsのエントリを返しRailsのファインダクエリを作成する方法を変数「my_date」、に保存されている(「2017年7月29日11時10」と言います) "my_date"から少なくとも24時間離れた最小の "index_date"を持つ行?私は、この表のデータ

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 

を持っていたし、私の例を与えられたのであれば、私は、クエリはidを持つ行を返すことを期待する「15」行なぜならidを持つ「14」の24時間離れて私の例からではありません。通常、クエリのこの種は

CryptoIndexValue.where('index_date = ?', my_date - 1) 

を働くだろうが、正確に24時間離れていないエントリがあるので、それはしていません。

答えて

0

私はあなたの例では、かなりの作業値とは思わない - 少なくとも私は、あなたが一日減算、そのインデックス日付でテーブルからその値を選択する方法を見ません。 「my_dateから将来少なくとも1日も早い日付の行」を意味しますか?

CryptoIndexValue. 
    where('index_date > ?', my_date + 1.days). 
    order(:my_date, :id). 
    take 

私はあなたが同じindex_dateを持つ2つの行のタイブレークを必要とするが、それが原因制約することは不可能だ場合、それを削除した場合のことで順番に:idを追加しました。

おそらく、追加する代わりに1日を引くことを意味します。

+0

いいえ、私の例は悪くはありません。私は質問を編集して "7-30"を "7-28"に置き換えました。 – Dave

0

>演算子とorderを組み合わせて使用​​する必要があります。

CryptoIndexValue.order(:index_date).find_by('index_date > ?', DateTime.now - 24.hours)

+1

おそらく、 'id'ではなく' index_date'によって注文する方が良いでしょう。 – alexanderbird

+1

また、 'my_date'から24時間を引く必要があります – alexanderbird

関連する問題