根据日期SQL

时间:2017-08-23 14:13:32

标签: sql sql-server date

我现在已经坚持了一段时间,但这可能很简单。

我要做的是根据另一个表中的日期从一个表中选择一个值。

例如,我有一张桌子,我有费率和开始日期:

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之后的记录中使用该费率,但之前的记录使用相关日期。

1 个答案:

答案 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中的每个记录执行查询。对于诸如此类的查询,它通常非常有效。

相关问题