根据过滤后的表 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 列的主要内容,如果未能解决你的问题,请参考以下文章