如何在 SQL 服务器中合并来自主 table 和日志 table 的信息

How to combine information from a main table and a log table in SQL Server

目前我的数据库中有 2 个 table 需要合并来自的信息。 其中之一是日志 table,它记录了系统中所有产品的状态变化。结构示例:

ChangeDate Product LastStatus NewStatus
2021-10-01 A New Aging
2021-11-02 A Aging Ressuply
2021-11-25 A Ressuply OFF
2021-08-03 B New Aging
2021-09-04 B New Aging
2021-10-13 B Ressuply OFF

另一个是事实 table,其中包含每种产品的每次销售。 结构示例:

Date Product PricePaid
2021-10-02 A 124
2021-11-05 A 115
2021-08-25 B 223
2021-09-03 B 218

我想写一份声明,告诉我产品在售出时的状态。 期望的结果:

Date Product PricePaid StatusAtTime
2021-10-02 A 124 Aging
2021-11-05 A 115 Ressuply
2021-08-25 B 223 Aging
2021-09-03 B 218 Aging

我已经苦思冥想了大约一个星期,似乎找不到答案。我想最大的挑战是性能,因为 table 有大约 2M 行,而且日志 table 也相当大。

提前谢谢大家:)

例如

select top(1) with ties s.*, l.NewStatus
from sales s
join statusLog l on s.Product = l.Product and s.Date >= l.ChangeDate
order by row_number() over(partition by s.Product, s.Date order by l.ChangeDate desc);

带样本数据returns

Date    Product PricePaid   NewStatus
2021-10-02  A   124 Aging
2021-11-05  A   115 Ressuply
2021-08-25  B   223 Aging
2021-09-03  B   218 Aging