我有一个数据集,其包含员工的id、状态和日期范围。下面是给出一个员工详细信息的输入数据集。记录中的日期范围是连续的(按确切顺序),因此第二行的开始日期将是第一行结束日期的下一个日期。
如果一个员工连续几个月请假,则表格会将日期范围分开存储。
例如,在输入集中,员工从'16-10-2016'到'31-12-2016'请病假,并在'1-1-2017'回来。因此,这个项目有3条记录,但日期是连续的。我需要输出时将其作为一个记录显示,如预期的输出数据集所示。
输入
Id Status StartDate EndDate
1 Active 1-9-2007 15-10-2016
1 Sick 16-10-2016 31-10-2016
1 Sick 1-11-2016 30-11-2016
1 Sick 1-12-2016 31-12-2016
1 Active 1-1-2017 4-2-2017
1 Unpaid 5-2-2017 9-2-2017
1 Active 10-2-2017 11-2-2017
1 Unpaid 12-2-2017 28-2-2017
1 Unpaid 1-3-2017 31-3-2017
1 Unpaid 1-4-2017 30-4-2017
1 Active 1-5-2017 13-10-2017
1 Sick 14-10-2017 11-11-2017
1 Active 12-11-2017 NULL
预期输出
Id Status StartDate EndDate
1 Active 1-9-2007 15-10-2016
1 Sick 16-10-2016 31-12-2016
1 Active 1-1-2017 4-2-2017
1 Unpaid 5-2-2017 9-2-2017
1 Active 10-2-2017 11-2-2017
1 Unpaid 12-2-2017 30-4-2017
1 Active 1-5-2017 13-10-2017
1 Sick 14-10-2017 11-11-2017
1 Active 12-11-2017 NULL
我无法在id、status分组时取min(startdate)和max(EndDate),因为如果同一名员工请了另一个病假,那么该结束日期(例如示例中的'11-11-2017')将成为最新的结束日期。
有谁能帮忙写一个SQL Server 2014的查询语句吗?