2013-09-26 6 views
1

У меня есть две таблицы журналов, которые я хотел бы связать, но записи, сделанные в каждой таблице, выполняются не в одно и то же время, а разница во времени меняется, но всегда должна быть в пределах секунды.Как связать несколько разное время

Для простоты, скажем, таблица А выглядит следующим образом:

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, но с точностью до 1 секунды в любом направлении для LogTime?

ответ

1

Я понял это было на самом деле немного проще, чем я понял.

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

Я пытался делать это на основе миллисекунды вместо секунд в первый раз, но это дает мне ошибку переполнения при сравнении дат, которые были слишком далеко друг от друга. Я бы предпочел сделать миллисекунды, хотя я могу сузить его до чуть меньше секунды, но не знаю, как лучше всего это сделать. Возможно, я мог бы использовать заявление о делах. Если кто-то хочет опубликовать ответ, который сделает это, я пометю его, иначе я вернусь позже и обновить свой ответ на работу с миллисекундами, когда у меня появится шанс.

Смежные вопросы