SQL:根据生效日期查找值
我们有一张员工表和另一张显示其角色历史的表。历史记录表具有从角色开始的生效日期。找到员工当前的角色很简单,但我在某个时间点上找不到他们的角色SQL:根据生效日期查找值,sql,sql-server,Sql,Sql Server,我们有一张员工表和另一张显示其角色历史的表。历史记录表具有从角色开始的生效日期。找到员工当前的角色很简单,但我在某个时间点上找不到他们的角色 Example: Table: Employee History Columns: EmployeeID Effective Date Role Sample Records: [ABC123, 1/4/2013, Developer] [ABC123, 6/9/2013, Desi
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]
可以安全地假设员工将始终拥有一个角色,即没有角色他们无法创建事件
我已经为此绞尽脑汁太久了,因此非常感谢您的帮助。您可以使用相关子查询来完成此操作:
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;