我有一张像
MemberID MembershipStartDate MembershipEndDate type
=============================================================================
123 2010-01-01 10:00:00.000 2012-12-31 23:00:00.000 1
123 2011-01-01 21:00:00.000 2012-12-31 12:00:00.000 2
123 2013-05-01 9:00:00.000 2013-12-31 5:00:00.000 2
123 2014-01-01 14:00:00.000 2014-12-31 2:00:00.000 1
123 2014-01-01 11:00:00.000 2015-03-31 1:00:00.000 2
其中对于给定的成员和类型,时间不会发生冲突:对于类型 1,将没有与其他行一致的开始和结束行,所以如果我有成员 123 类型 1 开始 2010-01-01 10: 00:00.000 并完成 2012-12-31 23:00:00.000,我不能让成员 123 类型 1 开始 2010-02-01 10:00:00.000 完成 2013-12-31 23:00:00.000,因为范围正在冲突(但是,我可以将其用于类型 2)。这是我现在的桌子。
我想要做的是消除相同 MemberID 的不同类型之间的时间冲突,因此对于 memberID 123,如果类型 2 的一行从 2013-05-01 9:00:00.000 开始并在 2013-12-31 结束5:00:00.000,类型 1 开始于 2013-10-01 9:00:00.000 并完成于 2014-12-31 5:00:00.000,因为类型 2 的行首先开始(后来开始的行是一个修剪),类型 1 的一个将被修剪为:2013-12-31 5:00:00.000 到 2014-12-31 5:00:00.000,如您所见,该行的新开始日期是类型 2 行的结束日期。
最后,第一个表将以
MemberID MembershipStartDate MembershipEndDate type
=============================================================================
123 2010-01-01 10:00:00.000 2012-12-31 23:00:00.000 1
123 2012-12-31 23:00:00.000 2012-12-31 12:00:00.000 2
123 2013-05-01 9:00:00.000 2013-12-31 5:00:00.000 2
123 2014-01-01 14:00:00.000 2014-12-31 2:00:00.000 1
123 2014-12-31 2:00:00.000 2015-03-31 1:00:00.000 2
时间没有必要按顺序排列。