我有员工在数据库中有合同。我想知道员工是否是某个地点的新员工。我有以下数据结构:确定员工是新员工还是离职员工
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参数。
我应该考虑很多情况。一样,索引字段并不总是一起BEGINDATE增加,就像你可以看到指数= 3
例子:
我想知道有多少员工在2013年一月
启动在这种情况下,没有什么因为第一份合同在2012年1月1日开始。有两个新合同,但该员工对该位置不是新手。但如果索引3不存在,那么whis应该是一个新员工。
可能员工有两份合同在同一天开始,如果他没有合同,那么它是1名新员工。
我已经尝试了以下方法,当员工只有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条记录,我想知道在Janury 2013名新员工,然后我想到:
LocationId NewEmployee
1 1
所以,无论如何,你将不得不使用上'BeginDate'一个'Min'(或等价的东西)。现在离职员工,你不介意他们在第一个合同之后是否有另一份合同?你可以用你的3行显示你想要检索的信息吗? –
@RaphaëlAlthaus查看编辑,所需的输出。 – Amedo