我现在已经坚持了一段时间,但这可能很简单。
我要做的是根据另一个表中的日期从一个表中选择一个值。
例如,我有一张桌子,我有费率和开始日期:
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 :(得分: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)
Cross apply主要使用表之间的相关性为WI中的每个记录执行查询。对于诸如此类的查询,它通常非常有效。