访问查询帮助 - 在另一条记录的时间范围内获取记录

时间:2013-10-03 20:05:18

标签: sql ms-access

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

Example

想象一下,我希望为每个人获得所有“SHIFT”(一个人每天可以有多次轮班)并且它是相关的休息(但也可能有其他事情)在日期范围内查询的方式是还不错。最终,我将使用多年的数据,并非所有人都需要这些数据。

此示例将返回前三行以及后两行。第5行是BREAK,但在第1行的SHIFT中不会发生。

我很乐意提供一些代码但我老实说甚至无法想到从这个开始的地方。我想我需要一个子查询?任何帮助将不胜感激!

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

1 个答案:

答案 0 :(得分: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
    )