1

我有两个要链接的日志表,但是每个表中的条目并不是在完全相同的时间完成的,并且时差会有所不同,但应该始终在一秒钟内。

为简单起见,假设表 A 如下所示:

ItemId int
Comment varchar(50)
LogTime datetime

假设表 B 具有完全相同的结构。

假设这些记录在表 A 中:

ItemId    Comment       LogTime
-----------------------------------
100       Test100-A1    12:00:00.00
200       Test200-A     12:00:03.50
100       Test100-A2    12:00:06.30

这些在表 B 中

ItemId    Comment       LogTime
-----------------------------------
100       Test100-B1    12:00:00.03
200       Test200-B     12:00:02.98
100       Test100-B2    12:00:06.53

我想要以下输出

A.ItemId    A.Comment   A.LogTime     B.ItemId    B.Comment   B.LogTime     
-------------------------------------------------------------------------
100         Test100-A1  12:00:00.00   100         Test100-B1  12:00:00.03
200         Test200-A   12:00:03.50   200         Test200-B   12:00:02.98
100         Test100-A2  12:00:06.30   100         Test100-B2  12:00:06.53

如何创建一个查询,以这种方式在 ItemId 和 LogTime 上将两个表链接在一起,但 LogTime 在任一方向上最多有 1 秒的变化?

4

1 回答 1

1

我想通了...实际上比我意识到的要简单一些。

select *
from   A left join
       B on A.ItemId = B.ItemId and
            abs(DATEDIFF(ss, A.LogTime, B.LogTime)) <= 1

我第一次尝试基于毫秒而不是秒来执行此操作,但是在比较相距太远的日期时,这给了我一个溢出错误。我宁愿做几毫秒,所以我可以把它缩小到不到一秒,但还不确定什么是实现这一目标的最佳方法。也许我可以使用案例陈述。如果其他人想发布一个答案,我会标记它,否则我会稍后回来更新我的答案,以便在我有机会时在毫秒内工作。

于 2013-09-26T22:01:45.747 回答