编辑:询问meta并决定修改我的问题,新增内容以粗体显示。
我有以下查询,用于查找重叠的时间段:
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
我需要以下结果,只需将所有值添加到单个列上,并添加一列以显示其中的行是成对的,以便稍后我可以使用该结果 here 。应该很简单,但我无法让它工作。
col pair_id
6 1
8 2
5 3
10 4
7 1
9 2
11 3
12 4
最佳答案
不确定这是否有效,但请尝试:
SELECT t1.id1
... snip ...
WHERE t1.id1 != t2.id1;
这只是明确排除 self 重叠,并允许“7”记录显示为“6”上的重叠(根据您的示例结果)。
关于mysql - 将列拆分为行,而不是经典的枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766756/