【问题标题】:Find Overlapping Dates Give Infinite Loop MySQL查找重叠日期给无限循环 MySQL
【发布时间】:2015-04-20 00:30:25
【问题描述】:

假设我有一张给定日期的表格:

+-----------+-----------+----+
|StartDate  |EndDate    |ID  |
+-----------+-----------+----+
|2013-08-29 |2014-12-29 |1   |
|2013-08-29 |2013-09-31 |2   |
|2015-01-02 |2015-03-20 |3   |
+-----------+-----------+----+

我想找到冲突的日期,所以代码应该给我 1 作为冲突的日期。当我在 MySQL 中编写这段代码时,它进入了一个无限循环,我希望能得到一点帮助,因为我看不出它为什么不起作用:

select t1.* from dates t1
inner join dates t2
on t2.StartDate > t1.StartDate
and t2.StartDate < t1.EndDate;

谢谢。

【问题讨论】:

  • 你所说的冲突是什么意思?

标签: mysql date


【解决方案1】:

不应该吗?

select t1.*, t2.id as conflict_id
from dates t1
inner join dates t2
on t2.StartDate >= t1.StartDate
and t2.EndDate <= t1.EndDate
and t2.id != t1.id

【讨论】:

    【解决方案2】:

    它不会进入无限循环。只是需要很长很长的时间。但是,这可能是一条更好的路线:

    select d.*
    from dates d
    where exists (select 1
                  from dates d2
                  where d2.StartDate < d1.EndDate and
                        d2.EndDate > d1.StartDate
                 );
    

    dates(StartDate, EndDate) 上的索引可能有助于查询。

    【讨论】:

    • 谢谢,这比我自己的代码好。还有一个问题(我忘了在正文中问):假设我在上表中又添加了一列,名称为“名称”,行 A、A、B。我希望这段代码(检查是否有冲突的日期)只查看 A 行,然后检查 B 行的冲突日期等。因此,A 和 B 之间可能存在冲突的日期,但 A 组中的日期不冲突.如何修改代码?谢谢。
    • 其实,这是我真正的问题,但我忘了问:)
    • @gurluk 。 . .你应该问另一个问题,并包括样本数据和期望的结果。不要在 cmets 中提出新问题。
    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多