2017-08-23 220 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中的每个记录执行查询。对于这些查询通常非常有效。