How to join by most recent preceding date?
select *
from dbo.Sales s
  cross apply (
  select top (1) *
  from dbo.PriceHistory ph where ph.itemId = s.ItemId and ph.Date &lt;= s.Date
  order by ph.Date desc
) ca;