0

我正在寻找一种查询表以获取某种类型的事件的方法,以及在同一个人的标准事件的时间范围内发生的所有事件。这听起来很可能是胡说八道。考虑以下;

例子

想象一下,我想为每个人获取所有“SHIFT”(一个人每天可能有多个班次)并且它是相关的休息时间(但也可能有其他事情)在日期范围内查询的方法也会很好. 最终,我将处理多年的数据,并不是所有的数据对每个人都是必要的。

此示例将返回前三行以及最后两行。第 5 行是一个 BREAK,但它不会出现在第 1 个人的 SHIFT 内。

我很想提供一些代码,但老实说,我什至想不出从哪里开始。我想我需要一个子查询?任何帮助将不胜感激!

我主要使用access 2003,因此针对此的响应将是理想的。

4

1 回答 1

1

按照您描述问题的方式,您似乎希望将班次和相关休息时间作为单独的行。为此,您可以使用union all两种不同类型的组合。相关子查询可让您查找轮班期间发生的中断。

Select
    *
From
    Events
Where
    Event_Name = 'SHIFT'
Union All
Select
    *
From
    Events e1
Where
    Event_Name = 'BREAK' And
    Exists (
        Select
            'x'
        From
            Events e2 -- find corresponding shift for break
        Where
            e1.Event_Owner = e2.Event_Owner And
            e2.Event_Name = 'SHIFT' And
            e1.Event_Start >= e2.Event_Start And
            e1.Event_End <= e2.Event_End
    )
于 2013-10-03T20:15:00.993 回答