SQL-坚持报告-如何计算超出员工时间表的时间间隔?

时间:2019-05-29 02:23:28

标签: sql tsql

我正在尝试在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的间隔。结果中没有一行,它们都是“开始”时间,这使得推导间隔变得复杂。

这是一个非常具体的问题,我在网上查找相关信息时遇到了麻烦。您能提供的任何帮助将不胜感激。

0 个答案:

没有答案