[英]Select record based on date 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之后的记录中使用,但以前的记录使用相对日期。
如果我们可以假设您的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中的每个记录执行查询。 对于此类查询,通常非常高效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.