在表Y中找到最接近表X

时间:2019-03-29 13:06:51

标签: sql

我正在尝试匹配2个不太匹配的表。

我有一个ATTENDANCE表,该表记录了人员姓名,电子邮件地址和进入时间。

我还有另一个表,该表列出了一个STARTTIMEENDTIMEdatetime字段)的事件。

人们可以提前或晚,甚至是几小时后标记出勤记录,因此它不能在这些时间之间,而是最接近的时间。

一天有多个EVENTS,所以我的查询需要最好的猜测-他们参加了什么活动?

1 个答案:

答案 0 :(得分:0)

此查询选择与每个条目时间最接近的开始时间:

WITH TimeDifferences AS
(
    SELECT a.Entrytime, e.Starttime, Abs(DateDiff(MINUTE, a.Entrytime, e.Starttime)) AS Timediff
    FROM Attendance a
    CROSS JOIN Event e
)
SELECT t.Entrytime, t.Starttime
FROM Attendance a
INNER JOIN TimeDifferences t
ON a.Entrytime = t.Entrytime
AND t.Timediff =
(
    SELECT Min(Timediff)
    FROM TimeDifferences t2
    WHERE a.Entrytime = t2.Entrytime
)