【发布时间】:2015-12-16 17:08:47
【问题描述】:
我有一张这样的桌子
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,如您所见,新的开始日期for the row 是类型 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
时间没有必要按顺序排列。
【问题讨论】:
标签: sql sql-server datetime relational-database sqldatetime