2

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

4

1 回答 1

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

此查询所需的索引是 on table(name, startdate, enddate)

于 2015-04-20T02:22:14.767 回答