繁体   English   中英

根据日期选择记录SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM