我试图在sql数据库中查找时隙冲突。表的一个例子是:
id | startTime | endTime
---+-----------+---------
1 | 09:00:00 | 10:00:00
2 | 10:00:00 | 10:20:00我正在工作的声明是要返回建议中的一个将与之冲突的位置,它是
SELECT COUNT(*) FROM Slots WHERE (endTime > #{start} AND endTime <= #{end}) OR (startTime >= #{start} AND startTime < #{end})但这不考虑现有时隙中的时隙,例如,如果我尝试从09:15预订一个时隙到09:45,系统将不会检测到与第一个时隙之间的冲突。
另一个设计要求是,如果一个插槽在11:00上完成,而另一个插槽同时启动,则没有任何冲突。
发布于 2015-12-13 14:44:54
假设新插槽为(start,end) = (s2,e2),将问题分解为更小/更简单的问题:
以上两个绝对是冲突,并照顾所有的情况下,一个时间部分重叠。但是,它不检查新插槽(s2,e2)是否环绕着现有的插槽,因此
您可以在一个查询中(使用OR)将这三者结合在一起,我认为它应该可以工作(而不是测试)。删除了相等项,以处理同时完成和开始的插槽。
SELECT COUNT(*) FROM Slots WHERE
(endTime > #{start} AND startTime < #{start})
OR
(endTime > #{end} AND startTime < #{end})
OR
(endTime < #{end} AND startTime > #{start})发布于 2015-12-13 14:38:30
试试看
SELECT COUNT(*) FROM Slots WHERE
(startTime > #{end} AND endTime > #{end})
OR
(startTime < #{start} AND endTime < #{start})发布于 2015-12-13 14:44:25
您所做的一切都是正确的,只更改了以下情况:
从endTime <#{start}和startTime > #{end}的插槽中选择COUNT(*)
希望这对你有帮助,祝你今天愉快:-)
https://stackoverflow.com/questions/34252177
复制相似问题