如何链接略有不同的时间

时间:2013-09-26 21:31:41

标签: sql-server-2008 join

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

为了简单起见,我们假设表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秒?

1 个答案:

答案 0 :(得分:1)

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

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

我尝试在第一次基于毫秒而不是秒的时候做这件事,但是当比较相距太远的日期时,这给了我一个溢出错误。我宁愿做毫秒,所以我可以把它缩小到不到一秒但不确定到目前为止最好的方法是什么。也许我可以使用案例陈述。如果其他人想要发布一个答案,我会标记它,否则我会稍后回来并在我有机会时更新我的​​答案,以毫秒为单位。