【发布时间】:2011-03-29 10:49:06
【问题描述】:
我有一个表 T1,它包含一个 NAME 值(不是唯一的)和一个日期范围(D1 和 D2 是日期) 当 NAME 相同时,我们将日期范围合并(例如 B)。
但是作为结果 (X),我们需要对所有日期范围进行交集
编辑: 表T1
NAME | D1 | D2
A | 20100101 | 20101211
B | 20100120 | 20100415
B | 20100510 | 20101230
C | 20100313 | 20100610
结果:
X | 20100313 | 20100415
X | 20100510 | 20100610
在视觉上,这将给出以下内容:
NAME : date range
A : [-----------------------]-----
B : --[----]----------------------
B : ----------[---------------]---
C : -----[--------]---------------
结果:
X : -----[-]----------------------
X : ----------[---]---------------
知道如何使用 SQL / PL SQL 来获得它吗?
【问题讨论】:
-
您可以尝试重叠 - 但它是未记录的功能,oraclesponge.wordpress.com/2008/06/12/the-overlaps-predicate 并且它仅检查数据范围是否重叠
-
您能否显示表中列值的实际列/行示例,以及您希望此 SQL 查询返回的数据值
-
结果中的日期交叉点是哪两个名字? A 和 C 是不同的名称,B 的两个范围似乎没有问题的日期范围。
-
@Mark Baker:我按照你的要求添加了表格行。 @Rajesh:A B 和 C 是我表中已有的数据,X 是我想要的结果。可以有多个同名的行,如 B。在这种情况下,我们将这些日期范围合并
-
@Michael Pakhantsov :正如orafaq.com/node/2067 所述,在生产环境中使用它并不安全(可能会在下一次 Oracle 更新后中断)。尽管如此,还是很有趣,感谢您提供的信息。
标签: sql oracle plsql date-range date-arithmetic