我在表格中有每日股票价格,并且我添加了一个我想自动计算的列。我不希望它是手动计算,因为股票价格是我用金融api导入模型的东西。
因此,我只是使用ActiveRecord-import
然后让该列自动填充。
有问题的列是过去5天的百分比变化和平均值。我觉得这是我可以在数据库端设置的东西,以便这些列自动填充。几乎像Excel能够只写=a1/b1
然后整个表填充。
这可以在rails模型或postgresql中使用吗? (使用rails 3.2和postgresql 9.2)
答案 0 :(得分:1)
还有另一种选择更接近您的想法:“计算字段”或“生成列”。有效地将行类型作为参数的函数。我引用the manual here:
功能表示法和属性表示法之间的等价性 可以使用复合类型上的函数来模拟“计算字段”
可能看起来像你的例子:
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
相关答案有更多细节和解释:
Computed / calculated columns in PostgreSQL
How do you do date math that ignores the year?
Store common query as column?
答案 1 :(得分:0)
我知道DB
方面有2个选项,您可以尝试使用view
,其中包含获取动态字段的逻辑,或者您可以使用trigger
在任何表格更改上自动填充它们
<强>更新强> * 触发器 *只是在您对表执行任何更新(插入/更新/删除)时自动触发的函数,此处有更多信息:http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html < / p>
视图是给出sql查询的pesudo名称,你可以把你的逻辑编写为
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