我正在尝试在SQL中建立依从性报告。我正在将员工的日程安排与他们当天的实际工作进行比较。在任何时间点,他们的当前活动要么符合他们的日程安排,要么不匹配。
使用INNER JOIN,我可以比较所有重叠的时间间隔。我的问题是考虑了不重叠的间隔。
示例:您计划从上午10点开始,但是您在上午9:30登录。我可以解释从上午10点开始的间隔时间,但是不能提前30分钟。
在下面的示例代码中,我有“实际”活动(a)和“预定”活动。每个活动还具有进行比较以查看它们是否匹配的类型。 (时间限制,持续时间和实际遵守情况在查询中处理,但为简单起见,我省略了它们)
SELECT a.ID
, a.Start
, a.End
, a.Type
, s.Start
, s.End
, s.Type
FROM a
INNER JOIN s ON a.ID = s.ID AND a.Start < s.End AND a.END > s.Start
此代码生成的行具有重叠的时间间隔。然后,我使用CASE WHEN生成间隔并比较数据。第一行可能看起来像:
45 | 9:30 AM | 10:58 AM | Available | 10:00 AM | 11:00 AM | Available
从中拉出的第一个时间间隔将是10:00 AM-10:58 AM(进一步的SQL编码会拉出较晚的开始时间和较早的结束时间)。我需要找到一种方法来解决9:30 AM到10:00 AM的间隔。结果中没有一行,它们都是“开始”时间,这使得推导间隔变得复杂。
这是一个非常具体的问题,我在网上查找相关信息时遇到了麻烦。您能提供的任何帮助将不胜感激。