【发布时间】:2018-02-06 15:33:51
【问题描述】:
我正在尝试解决与Find all intersections of all sets of ranges in PostgreSQL类似的问题
不同之处在于,在这个线程中,它获取 all 范围重叠的范围,而在我的用例中,我所有可能的重叠:
考虑 4 个范围,例如
[2018-01-01, 2018-01-15]
[2018-01-01, 2018-01-02]
[2018-01-07, 2018-01-20]
[2018-01-12, 2018-01-30]
像这样创建时间线
A [==============]
B [=]
C [=============]
D [===============]
我想获取所有发生的重叠,所以:
{ entities: [A, B], period: [2018-01-01, 2018-01-02] }
{ entities: [A, C], period: [2018-01-07, 2018-01-11] }
{ entities: [A, C, D], period: [2018-01-12, 2018-01-15] }
{ entities: [C, D], period: [2018-01-15, 2018-01-20] }
另一件事,结果我需要同一组中最可能的重叠,这解释了为什么没有A, D 重叠。
我已经在同一时期得到了A, C, D,并且没有只有A, D重叠的时期,而A, C则有一个。
我设法使来自另一个线程的查询与我的设置/表一起工作,但我不确定是否理解所有这些,尤其是“所有范围重叠的地方”的哪一部分。
谢谢。
【问题讨论】:
-
为什么
A, D被排除在您的预期输出之外?我不明白为什么A, D与A, C不同。 -
@MikeSherrill'CatRecall' 因为没有重叠部分,只有
A, D重叠,所以总是同时有C,我总是需要它们按大多数实体分组当下。我会尽量让问题更清楚,我没有想到这个用例。
标签: sql postgresql date-range