2015-02-24 148 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