如果同一日期不可用,是否在前一个日期加入?

Join on previous date if same date is not available?

enter image description here

我想将余额 table 添加到每个 UID 和 stock_name 和日期的订单中。该日期应在相同或之前的可用日期加入。

这是我的初始代码,但如果日期在订购日期期间不可用,它将 return 为空。

Select a.date, 
    a.stock_name, 
    a.UID, 
    a.Sale,
    b.avg_price, 
    a.Sale-b.avg_price as Gain
from orders as a
left join balance as b on a.UID = b.UID and a.stock_name = b.stock_name and a.date = b.date
order by a.date desc

我会为此使用 CROSS APPLY 或 OUTER APPLY (SELECT TOP 1 ...)。尝试:

outer apply (
    select top 1 *
    from balance as b
    where a.UID = b.UID
    and a.stock_name = b.stock_name
    and a.date >= b.date
    order by b.date desc
) b

这将 select 最接近的余额日期等于或早于订单日期。如果结果 b 为空,则没有余额记录。 OUTER APPLY 就像一个 LEFT OUTER JOIN,而 CROSS APPLY 就像一个普通的 INNER JOIN。您使用哪种取决于您喜欢如何处理不匹配情况。