组中的MySQL重叠日期

时间:2015-04-20 02:17:06

标签: mysql date overlapping-matches

对不起,如果这个问题是基本的,我正在学习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之间的重叠无关紧要。谢谢。

1 个答案:

答案 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)