谷歌搜索了一下,我发现这是一个有趣的问题。想请你们拍。
有我的桌子
USER | MAP | STARTDAY | ENDDAY
1 | A | 20110101 | 20110105
1 | B | 20110106 | 20110110
2 | A | 20110101 | 20110107
2 | B | 20110105 | 20110110
我想要的是修复用户的2
情况,其中映射A
和B
重叠几天(从 20110105 到 20110107)。我希望我能够以永远不会返回重叠范围的方式查询该表。我的输入数据已经很错误了,所以我不必担心冲突处理,我只想能够为任何给定的BETWEEN
这些日期获得一个值。
我正在尝试构建的查询的可能输出就像
USER | MAP | STARTDAY | ENDDAY
2 | B | 20110108 | 20110110 -- pushed overlapping days ahead..
2 | A | 20110101 | 20110104 -- shrunk overlapping range
算法是否导致“无效范围”甚至都没有关系,例如 Start = 20110105
, End = 20110103
,当我遇到这些情况时,我只会设置 null 。
你们会怎么说?有什么直接的方法可以完成这项工作吗?
谢谢!
F。