Sql 基于另一个表的行更新一个表的列的最有效方法是什么?

Sql 基于另一个表的行更新一个表的列的最有效方法是什么?,sql,database,postgresql,Sql,Database,Postgresql,假设我们有两个表,其中包含一些公司股票的信息,如下所示: 表1日期价格:由每家公司在不同日期的每只股票的价格组成 | Company_ID | Date | Stock_Price | Market_Value _______________________________________________________ ID_1 | 20190111 | 120 | ID_2 | 20190111 | 80

假设我们有两个表,其中包含一些公司股票的信息,如下所示:

表1日期价格:由每家公司在不同日期的每只股票的价格组成

| 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。资本筹集表包含不同的公司资本筹集信息。