检测日期重叠而不是日复一日

时间:2014-02-14 19:25:31

标签: mysql sql

我正在开展一个项目,该项目涉及管理特定日期司机有车的信息。表面上,分配应始终在下一个start_date之前至少一天具有end_date。

表就像

+----+--------+-----------+------------+----------+
| id | car_id | driver_id | start_date | end_date |
+----+--------+-----------+------------+----------+

人们有很多人力投入,他们并没有真正投入这个过程,编辑旧行和重叠。

现在我很容易想象在给定日期使用GROUP BY car_id运行许多查询,并查看在日期x上是否有多行汽车。

我想要理清的是一个单一查询,它表示所有行ID都包含任何一辆车的重叠日期。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

此查询将返回重叠的行对:

select r1.id, r2.id from rentals r1 join rentals r2
on r1.car_id = r2.car_id and r1.id != r2.id
where (r1.start_date < r2.end_date or r2.end_date is null)
and r1.end_date > r2.start_date;

这只是将每个日期范围与同一car_id的每个其他日期范围进行比较。

More info on overlapping dates.