1

テーブルに毎日の株価があり、自動計算したい列を追加しました。株価は財務 API を使用してモデルにインポートするものであるため、手動で計算したくありません。

したがって、私はただ使用ActiveRecord-importして、その列を自動入力します。

問題の列は、変化率と過去 5 日間の平均です。これらの列が自動入力されるように、これはおそらく DB 側で設定できるものだと思います。Excel が書き込みを行うだけ=a1/b1で、テーブル全体に値が入力されるのとほとんど同じです。

これは Rails モデルまたは postgresql で可能ですか? (rails 3.2 および postgresql 9.2 を使用)

4

2 に答える 2

1

「計算フィールド」または「生成された列」という、あなたが考えているものにさらに近い別のオプションがあります。事実上、行タイプをパラメーターとして取る関数。ここでマニュアルを引用します:

関数表記と属性表記が同等であるため、複合型で関数を使用して「計算フィールド」をエミュレートできます。

あなたの例では、次のようになります。

CREATE TABLE tbl (a_id int, a int, b int);
INSERT INTO tbl VALUES (1,3,7), (2,4,8), (3,9,2);

計算フィールドをエミュレートする関数calc:

CREATE OR REPLACE FUNCTION calc(tbl)
  RETURNS numeric LANGUAGE sql IMMUTABLE  AS
$func$
    SELECT round($1.a::numeric/$1.b, 2)
$func$;

電話:

SELECT *, t.calc FROM tbl t;  -- note the table-qualified call!

戻り値:

 a_id | a | b | calc
------+---+---+------
    1 | 3 | 7 | 0.43
    2 | 4 | 8 | 0.50
    3 | 9 | 2 | 4.50

より多くの詳細と説明を含む関連回答: PostgreSQL
の計算/計算列 共通クエリを列として保存しますか?

于 2013-03-28T08:00:26.047 に答える
0

DB側面に2つのオプションがあることを認識してviewいます。動的フィールドを取得するロジックを含む を使用するか、 を使用しtriggerてテーブルの変更時にそれらを自動入力することができます

更新: *トリガー* は、テーブルで更新 (挿入/更新/削除) を実行するときに自動的に起動される関数に他なりません。詳細については、http ://www.postgresql.org/docs を参照してください。 /9.1/static/sql-createtrigger.html

ビューは、SQL クエリを指定した疑似名です。ロジックを次のように記述できます。

create view test as select 1+1 as dynamic_col

そしてそれを次のように使用します

select * from test;

上記の場合、出力は2になりますが、要件に応じてビューをカスタマイズできます

ここに詳細があります:http://www.postgresql.org/docs/9.2/static/sql-createview.html

于 2013-03-28T03:16:42.057 に答える