【发布时间】:2018-08-15 06:30:13
【问题描述】:
我有一个任务,我什至不知道它是如何完成的。
我必须找到时差为 X 且布尔值为 ON/OFF 的记录。我尝试使用 LEFT OUTER JOIN 并使用 ON 子句中的条件,但它给了我错误的结果。
所以我的问题是,我怎样才能选择在 2 列中具有相同值但在其他 2 列中具有不同值的行?
编辑: 我的问题是,由于某种原因,我的实际查询多次返回相同的条目。我检查了该条目是否存在多次,但它不存在
参考数据:
ID1 ID2 Boolean Time
1 1 0 2018-03-06 11:31:39
1 1 1 2018-03-06 11:33:39
2 1 0 2018-03-06 11:31:39
2 2 1 2018-03-06 11:40:39
查询的期望输出是
ID1 ID2 Boolean Time
1 1 0 2018-03-06 11:31:39
1 1 1 2018-03-06 11:33:39
因为 ID1 和 ID2 相同,所以布尔值不同,时间差在指定范围内(比如说 5 分钟)。其他2条无效,因为ID2不同,时间差太大。
我当前的查询:
select
t1.id1,
t1.id2,
t1.boolean,
t1.time
from t1 t1
left outer join t1 t2
on t1.boolean != t2.boolean and datediff(minute, t1.time, t2.time)<=5
where t1.id1 = t2.id1
and t1.id2 = t2.id2
【问题讨论】:
-
您的查询是正确的,有什么问题
-
查询有什么问题?对于给定的数据,它给出了与您提到的相同的输出。只有一个错误
and t.id2 = t2.id2将t更改为t1 -
把
left join改成inner join,这里也不需要左连接 -
这是由于
left join可能将其更改为inner join并尝试 -
即使使用
inner join,我也至少得到每个条目 2 次span>
标签: sql sql-server join where