根据过滤后的表 2 更新表 1 列

Posted

技术标签:

【中文标题】根据过滤后的表 2 更新表 1 列【英文标题】:Updating table 1 column based upon filtered table 2 【发布时间】:2020-04-10 10:51:44 【问题描述】:

向 CoVid 世界的同胞们问好。我被一个看似简单的问题所困扰,但花了 4 个小时却没有产生任何结果。我有 2 个表 - ProductList (PL) 和 ProductPrice (PP)。 PL 看起来像这样

Date          Name       Price
2-Jan-20       A          [ ]
15-Apr-20      A          [ ]
19-Jul-20      A          [ ]

PP是这样的

Date          Name        Price
31-Dec-19      A           $10
31-Mar-20      A           $12
30-Apr-20      A           $14

我需要从 PP 表中的 Price col 更新 PL 中的 Price col。问题是这样的。 PP 表在价格变化发生时(不定期)捕获价格变化。因此,ProductList 表中的价格将通过在 ProductPrice 表中查找最接近的先前日期来更新。正是这种查找让我苦苦挣扎。

以上述示例得出结论,1 月 2 日交易的价格为 10 美元(即 ProductPrice 表中交易日期之前最接近日期的价格),而 4 月 15 日交易的价格为12 美元(因为 3 月 31 日的价格现在是交易前最接近的较早日期)。我没有代码可以提供,因为我什至无法摆脱这方面的障碍 - 更接近于接近。

感谢大家花时间和兴趣提供解决方案和建议。

【问题讨论】:

"one where spending 4 hours hasnt yielded any results"分享你的尝试 【参考方案1】:

使用APPLY:

select pl.*, pp.date
from pl outer apply
     (select top (1) pp.*
      from pp
      where pp.name = pl.name and pp.date <= pl.date
      order by pp.date desc
     ) pp;

您可以轻松地将其放入update

update pl
    set price = pp.price
from pl outer apply
     (select top (1) pp.*
      from pp
      where pp.name = pl.name and pp.date <= pl.date
      order by pp.date desc
     ) pp;

【讨论】:

好的 - 我坐在这里有点惊讶,因为您提供了一个适合 完美 的 6 行解决方案。这是一些严重的震惊和敬畏的伙伴。非常感谢!

以上是关于根据过滤后的表 2 更新表 1 列的主要内容,如果未能解决你的问题,请参考以下文章

提取过滤后的表数据

两个数据库之间的数据库更改

如何根据条件过滤后的熊猫数据框来导出列

根据一列删除重复项并根据另一表中的数据进行过滤

(闪亮)修改用户过滤的表并看到它反映在主表中

如何使用另一个表中的日期列过滤一个表的开始和结束日期