1

従業員のテーブルと、その役割の履歴を示す別のテーブルがあります。履歴テーブルには、役割が開始されたときからの有効日があります。従業員の現在の役割を見つけるのは簡単ですが、特定の時点での役割を見つけるのに問題があります。

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]

Employee には常に役割があると考えて間違いありません。つまり、従業員は役割がなければイベントを作成できません。

私はこれについてあまりにも長い間頭を悩ませてきたので、どんな助けも大歓迎です.

4

1 に答える 1

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;
于 2013-08-23T11:34:52.723 に答える