データベースに契約のある従業員がいます。従業員がその場所の新入社員かどうかを知りたいです。私は次のデータ構造を持っています:
EmployeeId Index BeginDate Enddate HoursToWork LocationId
12133 1 2013-01-01 2014-01-01 10 1
12133 2 2013-06-01 2014-01-01 20 1
12133 3 2012-01-01 2014-01-01 5 1
ご覧のとおり、従業員は 1 つの場所で複数の契約を持つことができます。その後、Endate を null にすることができます。
場所ごと、および月または四半期ごとに、何人の従業員が開始されたかを確認したいと考えています。データを取得したい期間に @Startdate および @Enddate パラメータを使用したい。
私が考慮に入れなければならない多くのケースがあります。同様に、Index = 3 でわかるように、Index フィールドは Begindate と一緒に常に増加するわけではありません。
例:
2013 年 1 月に入社した従業員数を知りたいです。
この場合、最初の契約は 2012 年 1 月 1 日に開始されたため、何もありません。2 つの新しい契約がありますが、この従業員はその場所にとって新しいものではありません。しかし、インデックス 3 が存在しない場合、whis は新しい従業員である必要があります。
従業員が同じ日に開始する 2 つの契約を持っている可能性があります。契約前に契約を結んでいない場合は、1 人の新しい従業員です。
私はすでに次のことを試しました。これは、従業員が1つの契約しか持っていない場合に機能します。しかし、複数の契約がある場合、従業員が新人かどうかを判断するのは困難です。
declare @Startdate datetime set @Startdate = '2013-01-01'
declare @Enddate datetime set @Enddate = '2013-12-31'
select EmployeeId, Index, BeginDate, Enddate, HoursToWork, LocationId
,(case
when BeginDate between @Startdate and @Enddate then 1
end) as NewEmployee
,(case
when Enddate between @Startdate and @Enddate then 1
end) as LeavingEmployee
from Contracts
3 つのレコードを考えると、この従業員は新入社員ではありません。次のような出力が必要です。
LocationId NewEmployee
1 0
最初の 2 つのレコードがあり、2013 年 1 月の新入社員を知りたい場合、次のことを期待します。
LocationId NewEmployee
1 1