2013-08-23 79 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