对不起,如果这个问题是基本的,我正在学习MySQL。
我们假设我有一个名字和给定日期的表:
+----+-----------+-----------+
|Name|StartDate |EndDate |
+----+-----------+-----------+
|A |2013-08-29 |2014-12-29 |
|A |2013-08-29 |2013-09-31 |
|B |2015-01-02 |2015-03-20 |
|B |2013-08-20 |2013-08-30 |
+----+-----------+-----------+
我想找到具有冲突(重叠)日期的元素(名称)。这里,A有冲突的日期,B没有,代码应该返回A. A和B之间的重叠无关紧要。谢谢。
答案 0 :(得分:0)
您可以使用
执行此操作select distinct name
from onetable t
where exists (select 1
from onetable t2
where t2.name = t.name and
t2.startdate < t.enddate and
t2.enddate > t.startdate
);
答案类似于上一个答案,在name
子句中添加了where
比较。
此查询所需的索引位于table(name, startdate, enddate)
。