1

Employees テーブルと、雇用状況の変化をキャプチャする EmploymentHistory テーブルがあります。特定の日付に「採用済み」のステータスを持つすべての従業員のリストを選択できるようにしたいと考えています (たとえば、2013 年 4 月 2 日、以下では John Smith のみが生成されます)。

Employees       
employeeId    lastName    firstName
1             Smith       John
2             Doe         Jane
3             Carson      Mike

EmployeeHistory         
employeeHistoryId   employeeId    employmentStatus    transactionDate
1                   1             Hired               3/1/2013
2                   2             Candidate           4/1/2013
3                   2             Not Hired           4/5/2013
4                   3             Candidate           1/1/2013
5                   3             Hired               1/3/2013
6                   3             Terminated          2/15/2013

ありがとう!

4

1 に答える 1

1

データベースが をサポートしている場合はrow_number()、それを使用して、特定の日付より前の従業員ごとの最後の行を見つけることができます。例えば:

select  *
from    Employees e
join    (
        select  row_number() over (
                    partition by employeeId
                    order by transactionDate desc) as rn
        ,       employeeId
        ,       employmentStatus
        from    EmployeeHistory
        where   transactionDate < '2013-04-02'
        ) h
on      e.EmployeeId = h.EmployeeId
        and h.rn = 1 -- Only last row
where   h.employmentStatus = 'Hired'

SQL Fiddle での実例。

于 2013-05-27T16:23:32.597 に答える