Sql 基于另一个表的行更新一个表的列的最有效方法是什么?
假设我们有两个表,其中包含一些公司股票的信息,如下所示: 表1日期价格:由每家公司在不同日期的每只股票的价格组成Sql 基于另一个表的行更新一个表的列的最有效方法是什么?,sql,database,postgresql,Sql,Database,Postgresql,假设我们有两个表,其中包含一些公司股票的信息,如下所示: 表1日期价格:由每家公司在不同日期的每只股票的价格组成 | Company_ID | Date | Stock_Price | Market_Value _______________________________________________________ ID_1 | 20190111 | 120 | ID_2 | 20190111 | 80
| Company_ID | Date | Stock_Price | Market_Value
_______________________________________________________
ID_1 | 20190111 | 120 |
ID_2 | 20190111 | 80 |
.
.
.
ID_N | 20200411 | 153 |
ID_1 | 20200412 | 123 |
ID_2 | 20200412 | 78 |
.
.
表2增资:包括所有公司的所有增资日期以及增资前后各公司的股票数量
| Company_ID | Raise_Date | Before_Raise_Stocks | After_Raise_Stocks |
________________________________________________________________________
ID_1 | 20190504 | 300,000,000 | 400,000,000
ID_3 | 20190812 | 800,000,000 | 900,000,000
ID_1 | 20191210 | 400,000,000 | 450,000,000
.
.
.
我想更新第一个表的Market_Value列。要做到这一点,我需要将股票价格乘以该公司当日的股票数量
问题是这样做最有效的方法是什么?这是纯SQL实现的还是我需要使用另一个程序?使用连接:
使用联接:
您可以使用内部查询:
update date_price dp
set Market_Value = dp.Stock_Price * (
select After_Raise_Stocks
from capital_raises cr
where cr.Raise_Date <= dp.Date
and cr.Company_ID = dp.Company_ID
order by cr.Raise_Date desc
limit 1
)
您可以使用内部查询:
update date_price dp
set Market_Value = dp.Stock_Price * (
select After_Raise_Stocks
from capital_raises cr
where cr.Raise_Date <= dp.Date
and cr.Company_ID = dp.Company_ID
order by cr.Raise_Date desc
limit 1
)
你必须在股票上市前或上市后乘以吗?每个公司ID和日期的集资是否都有一行?如果日期是在集资之后,我们乘以集资之后的股票,否则,我们乘以集资之前的股票。但是,一只股票可能会有多次增发。你需要在增发股票之前或之后乘以吗?每个公司ID和日期的集资是否都有一行?如果日期是在集资之后,我们乘以集资之后的股票,否则,我们乘以集资之前的股票。但是一只股票可能会有多个股票上涨。我可以请你解释一下lead的功能吗?@Abraham。数据库文档是一个很好的起点:。我可以请您对lead功能做一点解释吗?@Abraham。最好从数据库的文档开始:。您没有检查公司ID。资本筹集表包含不同的公司资本筹集信息。您没有检查公司ID。资本筹集表包含不同的公司资本筹集信息。