Sql-Server

如何在最近的前一天加入?

  • October 9, 2014

想像一下,我有一個包含歷史價格數據的數據庫和一個包含日期的第二個表

Item | Price | Date               Customer | Item | date
-------------------------         ---------------------------
  A | 2.49$ | 2014-09-01                1 |    A | 2014-08-27
  B | 1.29$ | 2014-09-01                2 |    A | 2014-09-02
  A | 2.99$ | 2014-08-25                
  B | 1.39$ | 2014-08-26

每次價格變化時,都會在價格歷史表中輸入一個新行。

我怎樣才能(有效地)連接這兩個表,以便我可以獲得每個客戶當天必須支付的價格?

SQLFiddle

select *
from dbo.Sales s
 cross apply (
 select top (1) *
 from dbo.PriceHistory ph where ph.itemId = s.ItemId and ph.Date <= s.Date
 order by ph.Date desc
) ca;

引用自:https://dba.stackexchange.com/questions/78765