我有两个我希望链接的日志表,但每个表中的条目不是在完全相同的时间完成的,时差会有所不同,但应始终在一秒之内。
为了简单起见,我们假设表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秒?
答案 0 :(得分:1)
我想通了......实际上比我意识到的要简单一些。
select *
from A left join
B on A.ItemId = B.ItemId and
abs(DATEDIFF(ss, A.LogTime, B.LogTime)) <= 1
我尝试在第一次基于毫秒而不是秒的时候做这件事,但是当比较相距太远的日期时,这给了我一个溢出错误。我宁愿做毫秒,所以我可以把它缩小到不到一秒但不确定到目前为止最好的方法是什么。也许我可以使用案例陈述。如果其他人想要发布一个答案,我会标记它,否则我会稍后回来并在我有机会时更新我的答案,以毫秒为单位。