Вы можете использовать NOT EXISTS
, чтобы проверить, что нет другой строки с меньшим или равным временем, которое находится в течение пяти минут в прошлом от текущего времени, которое мы получаем с dateadd()
.
Чтобы решить, является ли строка текущей строкой, вам нужен ключ. В отсутствие одного в вашем посте я использовал недокументированную псевдо колонку %%physloc%%
в качестве суррогата. Но недокументированный означает, что может быть изменен без дополнительного уведомления, поэтому вы хотите заменить его.
Чтобы исправить время разделения даты, вы можете использовать +
.
Для удобства я использую CTE, чтобы подготовить исходную таблицу в более удобной форме.
WITH
cte
AS
(
SELECT date,
time,
employeeid,
date + time datetime,
%%physloc%% physloc
FROM import_time
)
SELECT c1.date,
c1.time,
c1.employeeid
FROM cte c1
WHERE NOT EXISTS (SELECT *
FROM cte c2
WHERE c2.employeeid = c1.employeeid
AND c2.physloc <> c1.physloc
AND c2.datetime <= c1.datetime
AND c2.datetime > dateadd(minute, -5, c1.datetime));
дб <> скрипка