0

编辑:并决定修改我的问题,以粗体添加新内容。

我有以下查询,可以找到重叠的时间段:

SELECT t1.id1, t2.id1
  FROM `mytable` AS t1
  JOIN `mytable` AS t2
    ON (
        ((t1.start_date BETWEEN t2.start_date AND t2.end_date))
        OR ((t1.end_date BETWEEN t2.start_date AND t2.end_date))
       )
 WHERE t1.id1 < t2.id1;

结果集是:

id1    id1
 6      7
 8      9
 5      11
 10     12

我需要以下结果,只需将所有值添加到单个列上,然后添加一列以显示成对的行,以便稍后我可以在此处使用该结果。应该很简单,但我无法让它工作。

col    pair_id
 6       1
 8       2
 5       3
 10      4
 7       1
 9       2
 11      3
 12      4
4

2 回答 2

1

这是 sql 中称为“联合”的标准功能。查看您正在使用的数据库系统的文档。

于 2012-12-07T16:14:14.737 回答
1

不确定这是否可行,但请尝试:

SELECT t1.id1
... snip ...
WHERE t1.id1 != t2.id1;

这只是明确排除了自我重叠,并允许“7”记录显示为“6”上的重叠(根据您的示例结果)。

于 2012-12-07T16:15:51.490 回答