【发布时间】:2019-06-05 11:18:53
【问题描述】:
我正在尝试创建一个 SQL 触发器函数,该函数应该在将数据插入到表中时更新列。更新基于正在插入的值中存在的值。
我有下表来存储股票的每日 OHLC 数据。
CREATE TABLE daily_ohlc (
cdate date,
open numeric(8,2),
high numeric(8,2),
low numeric(8,2),
close numeric(8,2),
sma8 numeric(8,2)
);
插入命令:
INSERT INTO daily_ohlc (cdate, open, high, low, close)
values ('SYMBOL', 101, 110, 95, 108);
执行此命令时,我想根据正在插入的当前值和表中已有的值更新“sma8”列。
到目前为止,我正在使用以下 SQL 查询来计算每一行的值,然后使用结果来使用 python 更新“sma8”列。
SELECT sec.date, AVG(sec.close)
OVER(ORDER BY sec.date ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) AS
simple_mov_avg FROM daily_ohlc sec;
上述查询计算最近 8 条记录(包括当前行)的简单移动平均线。
使用此过程,我每次插入数据时都会更新“sma8”列中的每一行数据。我想通过使用触发器只更新最后一行(即插入的行)。如何做到这一点?
【问题讨论】:
-
表的唯一键/主键是什么?.. 您如何将字母字符串
'SYMBOL'插入日期列? -
@KaushikNayak 这是我输入问题时的错误。问题中的 INSERT 命令应该是
INSERT INTO daily_ohlc (cdate, open, high, low, close) values ('2019-01-10', 101, 110, 95, 108); -
那么,cdate 是表中的唯一列吗?
-
@KaushikNayak,是的 cdate 是主键(唯一)。
标签: sql postgresql triggers