如何将上一个值复制到另一列



我有一个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;

相关内容

最新更新