По комментариям кажется, что это условие соединения будет работать
select distinct
a.*
,Failure = case when f.Name is not null then 1 else null end
from Accesses a
left join Failure F on
f.Name = a.Name
and f.Time > dateadd(minute,-1, a.Time)
and f.Time < dateadd(minute, 1, a.Time)
and f.Date = a.Date
Вот способ перестроить полночь, сделав DATETIME
из ваших отдельных столбцов.Обратите внимание, что я добавил дополнительную строку в каждую таблицу.
declare @Accesses table (Date date, Time time, Name char(2), accesses bit)
insert into @Accesses
values
('2018-10-10','10:10:34.00','JA',1 ),
('2018-10-10','10:14:10.10','AA',1),
('2018-10-10','12:15:00.45','BE',1),
('2018-10-10','15:00:00.50','JA',1),
('2018-10-10','16:56:56.15','BE',1),
('2018-10-10','23:59:56.15','XX',1)
declare @Failure table (Date date, Time time, Name char(2), failure bit)
insert into @Failure
values
('2018-10-10','10:10:40.00','JA',1),
('2018-10-10','10:15:06.00','AA',1),
('2018-10-10','16:57:01.14','BE',1),
('2018-10-11','00:00:01.15','XX',1)
select distinct
a.*
,Failure = case when f.Name is not null then 1 else null end
from @Accesses a
left join @Failure F on
f.Name = a.Name
and cast(convert(varchar,f.date) + ' ' + left(convert(varchar,f.time),8) as datetime) > dateadd(minute,-1,cast(convert(varchar,a.date) + ' ' + left(convert(varchar,a.time),8) as datetime))
and cast(convert(varchar,f.date) + ' ' + left(convert(varchar,f.time),8) as datetime) < dateadd(minute,1,cast(convert(varchar,a.date) + ' ' + left(convert(varchar,a.time),8) as datetime))