我正在寻找一种查询表格来获取某种类型事件的方法,以及在同一个人的条件事件的时间范围内发生的所有事件。这可能听起来像胡说八道。请考虑以下事项;
想象一下,我希望为每个人获得所有“SHIFT”(一个人每天可以有多次轮班)并且它是相关的休息(但也可能有其他事情)在日期范围内查询的方式是还不错。最终,我将使用多年的数据,并非所有人都需要这些数据。
此示例将返回前三行以及后两行。第5行是BREAK,但在第1行的SHIFT中不会发生。
我很乐意提供一些代码但我老实说甚至无法想到从这个开始的地方。我想我需要一个子查询?任何帮助将不胜感激!
我主要使用Access 2003,因此针对此的响应将是理想的。
答案 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
)