我正在尝试匹配2个不太匹配的表。
我有一个ATTENDANCE
表,该表记录了人员姓名,电子邮件地址和进入时间。
我还有另一个表,该表列出了一个STARTTIME
和ENDTIME
(datetime
字段)的事件。
人们可以提前或晚,甚至是几小时后标记出勤记录,因此它不能在这些时间之间,而是最接近的时间。
一天有多个EVENTS
,所以我的查询需要最好的猜测-他们参加了什么活动?
答案 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
)