我有一个Postgres数据库,它有大量数据,包括模式和所有数据库属性。我想创建开盘价,这是从同一个符号上一个收盘价。
我的数据如下:
ID DATE SYMBOL OPEN CLOSE
1 1.01.2020 ABC 2,33
2 1.01.2020 XYZ 10,32
3 1.01.2020 KLM 30,33
4 1.01.2020 DEF 50,78
5 3.01.2020 ABC 3,00
6 3.01.2020 KLM 31,00
7 4.01.2020 ABC 4,00
8 4.01.2020 XYZ 13,00
9 4.01.2020 KLM 25,00
10 4.01.2020 DEF 48,00
11 5.01.2020 XYZ 11,50
12 5.01.2020 DEF 47,53
13 7.01.2020 ABC 4,58
14 7.01.2020 XYZ 12,54
15 7.01.2020 KLM 25,78
16 7.01.2020 DEF 48,33
我创建了开放栏,这应该是以前的符号价格。
我的预期输出:
ID DATE SYMBOL OPEN CLOSE
1 01.01.2020 ABC 2,33
2 01.01.2020 XYZ 10,32
3 01.01.2020 KLM 30,33
4 01.01.2020 DEF 50,78
5 03.01.2020 ABC 2,33 3,00
6 03.01.2020 KLM 30,33 31,00
7 04.01.2020 ABC 3,00 4,00
8 04.01.2020 XYZ 10,32 13,00
9 04.01.2020 KLM 31,00 25,00
10 04.01.2020 DEF 50,78 48,00
11 05.01.2020 XYZ 13,00 11,50
12 05.01.2020 DEF 48,00 47,53
13 07.01.2020 ABC 4,00 4,58
14 07.01.2020 XYZ 11,50 12,54
15 07.01.2020 KLM 25,00 25,78
16 07.01.2020 DEF 47,53 48,33
开盘价=上一收盘价ABC 01.01.2020收盘价2,33=ABC 03.01.2020开盘价2,33
我的数据库是活动的,每天都在获取新的数据,应该是OPEN列,必须用(相同的符号(以前的收盘价格数据填充。
所有符号在某一天都没有价格,目前它的列数已超过100000。我尝试了一些sql查询,但没有弄清楚。我是数据库查询的新手。根据我对文档的理解,的定义如下
那么这可能吗?如果是,如何?提前谢谢。。
我想你只想要lag()
:
select t.*,
lag(close) over (partition by symbol order by date) as prev_close
from t;
如果您想更新表中的值,可以使用join
(添加列后(:
update t
set open = tt.prev_close
from (select t.*,
lag(close) over (partition by symbol order by date) as prev_close
from t
) tt
where tt.id = t.id and
tt.prev_close is distinct from t.open;