2013-08-23 55 views
1

我们有员工表和其他表显示其角色历史记录。历史记录表具有角色启动时的生效日期。发现员工目前的角色是微不足道的,但我在某个时间点发现他们的角色时遇到问题。SQL:根据生效日期查找值

Example: 

Table: Employee History 

Columns: EmployeeID 
     Effective Date 
     Role 

Sample Records: [ABC123, 1/4/2013, Developer] 
       [ABC123, 6/9/2013, Designer] 
       [DEF456. 8/5/2013, Manager] 


Table: Event 

Columns: EventID 
     Date 
     EmployeeID 
     Event Type 

Sample Records: [1, 6/6/2013, ABC123, BOOKED_HOURS] 
       [2, 6/9/2013, ABC123, BOOKED_LEAVE] 
       [3, 8/5/2013, DEF456, SICK_LEAVE] 

然后我有一个展示一系列已经发生了一段时间,并希望看到什么样的员工的作用是在发生该事件的时间事件的另一个表。我希望能够使用普通SQL而不是函数来完成此操作。

结果集,我以后是一样的东西:

[6/6/2013, ABC123, Developer, BOOKED_HOURS] 
[6/9/2013, ABC123, Designer, BOOKED_LEAVE] 
[8/5/2013, DEF456, Manager, SICK_LEAVE] 

它可以安全地假设一个雇员总会有一定的作用,即他们不能创建一个没有作用的事件。

我一直在这个问题上一直在困扰着我的大脑,因此任何帮助都将不胜感激。

回答

3

您可以使用相关子查询做到这一点:

select e.*, 
     (select top 1 eh.Role 
     from EmployeeHistory eh 
     where e.EmployeeId = eh.EmployeeId and 
       e.date >= eh.EffectiveDate 
     order by eh.EffectiveDate desc 
     ) as Role 
from Event e; 
+0

非常感谢你为。不胜感激 – chillysapien