2014-02-14 18 views
1

我正在開發一個項目,涉及管理哪些司機在某一天有車的信息。表面上,分配應始終在下一個start_date之前至少有一天有一個end_date。檢測日期重疊不會一天一天

表就像

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

有來自人誰沒有真正投入在這個過程中,舊行的編輯了大量的人力投入和重疊發生。

現在我可以很容易地想象在給定的日期使用GROUP BY car_id運行許多查詢,並查看在日期x中是否有不止一行的汽車。

我想要解決的是一個單一的查詢,它指出了任何一輛汽車都有重疊日期的所有行ID。任何人都可以將我指向正確的方向嗎?

回答

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.

+1

謝謝!第三行有一個小編輯來解釋尚未設置結束日期的行:WHERE(r1.start_date jerrygarciuh

+1

好了!我沒有考慮正在進行的租金。更新了答案 – crennie