sql中的区间重叠

时间:2010-03-23 10:37:55

标签: tsql sql-server-2008 time intervals intersect

我需要获得分割间隔和重叠间隔的数量,例如

basedata:

interval A: startTime 08:00, endTime 12:00
interval B: startTime 09:00, endTime 12:00
interval C: startTime 12:00, endTime 16:00
interval D: startTime 13:00, endTime 14:00

现在我有一个单独的间隔从10:00到15:00,并且必须确定最初交叉的间隔。结果应该是这样的:

1: 10:00 - 12:00 ( intersecting with interval A )
2: 10:00 - 12:00 ( intersecting with interval B )
3: 12:00 - 15:00 ( intersecting with interval C )
4: 13:00 - 14:00 ( intersecting with interval D )

这部分工作正常,以下引起麻烦:

我需要对并行间隔进行某种加权。这也意味着,如果间隔交叉点(部分地)与另一个交叉点相交,则必须将间隔交叉点分割n次。

在上面的示例中,期望的结果将是:

1: 10:00 - 12:00 -> weightage: 50%
2: 10:00 - 12:00 -> weightage: 50%

3.1: 12:00 - 13:00 -> weightage: 1oo%
3.2: 13:00 - 14:00 -> weightage: 50%
3.3: 14:00 - 15:00 -> weightage: 50%

4: 13:00 - 14:00 -< weightage: 100%

区间3的分割是由于在13:00到14:00之间与区间4相交而引起的。

sql-server是ms-sql 2008。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果我理解你正在尝试做的事情,那么你的预期结果不应该

1: 10:00 - 12:00 -> weightage: 50%
2: 10:00 - 12:00 -> weightage: 50%

3.1: 12:00 - 13:00 -> weightage: 1oo%
3.2: 13:00 - 14:00 -> weightage: 50%
3.3: 14:00 - 15:00 -> weightage: 50%

4: 13:00 - 14:00 -< weightage: 50%

自13:00-14:00使用两次?