2015-02-24 145 views
0

我有開始和結束時間的數據庫,像這樣:計算差異

+----+-------+-------+ 
| id | start | end | 
+----+-------+-------+ 
| 1 | 10:00 | 12:00 | 
| 2 | 13:00 | 15:00 | 
| 3 | 14:00 | 19:00 | 
+----+-------+-------+ 

我想看看(這些記錄2之差讓現在稱他們的時間表)有一個最小的差異。我的意思是這些時間表中的2個不能重疊(如23),而且我需要驗證一個結束和下一個開始之間的最小差異(該btw也解決了重疊以來的差異,情況會是負面的)。

有什麼辦法可以實現這隻有使用SQL?

如果沒有,我的應用程序服務器正在使用Ruby On Rails(4.2,最新版本),是否有一種使用RoR的高性能方法?由於性能高效,我的意思是在一兩秒鐘內運行幾百條記錄。

如果有任何幫助,數據庫是最新的MySQL版本。

我希望對此有任何幫助或指導!

回答

1

通過在WHERE子句中進行自比較,可以看到是否有任何時間重疊。你的SQL會是這個樣子:

SELECT 
    t1.id as table1id, 
    t2.id as table2id 
FROM 
    table1 t1, 
    table2 t2 
WHERE 
    t1.id <> t2.id 
    and t1.start < t2.end 
    and t1.end > t2.start 

要檢查是否有足夠的時間在活動結束後,你會改變t2.endt1.enddate_add(t1.end, interval 1 hour)date_add(t2.end, interval 1 hour)

+0

要理解爲什麼這個工程,只記得那個時間(仍然)是線性的:事件在開始之前不能結束!但不要使用逗號式連接。 – Strawberry 2015-02-24 08:42:49