2017-08-23 231 views
0

我一直堅持這一段時間,但它可能是簡單的。根據日期選擇記錄SQL

我想要做的是從一個表中選擇一個基於另一個日期的值。

比如我有,我已經有了率表和日期時,他們開始:

Rate ID Worker_ID Rate Rate_Date 
1   3   2.50 01-06-2017 
2   4   3.00 01-06-2017 
3   3   4.50 23-08-2017 

然後我有一個信息表時的工作進行:

LabourID Worker_ID Hours Date 
1    3   2.00 02-06-2017 
2    4   3.50 03-06-2017 
3    3   1.00 23-08-2017 

工人3在23/08工作率有變化。我希望在該日期之前的記錄使用該日期之前的價格,並在該日期之後記錄使用該日期之後的價格。如果有額外的費率,例如在2周內,我希望該費率在Rate_date之後的記錄中使用,但以前的記錄使用相關日期。

+0

對不起,MS SQL –

回答

0

如果我們可以假設交叉敷在你的RDBMS提供...

這基本上從WorkInfo 選擇所有記錄,然後只有最近的記錄速度小於或等於工作時間爲工人。

SELECT * 
FROM WorkInfo WI 
CROSS APPLY (SELECT Top 1 R.* 
      FROM Rate R 
      WHERE WI.Worker_ID = R.Worker_ID 
       and R.Rate_date <= WI.Date 
      ORDER BY Rate_date Desc) 

交叉申請本質上使用表間的相關性對WI中的每個記錄執行查詢。對於這些查詢通常非常有效。