我有一个表,我正在尝试查找计划在相同开始和结束时间的项目,并且有两个布尔字段指示计划冲突。这里的表格看起来很像没有多余的东西:
id | RecordNo | Starttime | Endtime | Description | Bool1 | Bool2
现在,这些记录有不同的RecordNo
,但如果两个记录具有相同的Description
,Starttime
和Endtime
,并且一条记录的Bool1
为FALSE且另一条记录的Bool2
为TRUE,反之亦然,这将是一个时间表冲突。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
完全相同的开始时间和结束时间的碰撞
with records as(
select starttime, endtime from table group by starttime, endtime where count(starttime)>1
)
select recordno from table t
inner join records r on t.starttime=r.starttime and t.endtime=r.endtime
但我认为你也可能想要重叠碰撞
select t1.recordno
from table t1
inner join table t2
on (t1.starttime between t2.starttime and t2.endtime)
or
(t1.endtime between t2.starttime and t2.endtime)
这有点危险,因为它会将表中的每条记录连接到表中的每条记录。如果表中有10行,则会在将其缩小到结果之前创建100行。对于100行,它将创建10000行,然后缩小到您的结果。
行^ 2
根据您的上一条评论,您可能希望根据描述和不同的布尔值以及在这种情况下获取重复交易的确切时间进行第二种方法
select t1.recordno
from table t1
inner join table t2
on t1.starttime=t2.starttime
and t1.endtime=t2.endtime
and t1.description=t2.description
and t1.Bool1 != t2.Bool1
and t1.Bool2 != t2.Bool2