0

特定のタイプのイベントと、同じ人の基準イベントの時間枠内で発生するすべてのイベントを取得するためにテーブルをクエリする方法を探しています。それはおそらくナンセンスのように聞こえました。以下を検討してください。

例

各人のすべての「SHIFT」を取得したいと想像してください(人は1日に複数のシフトを持つことができます)、それに関連付けられた休憩(しかし、他のものもある可能性があります)日付範囲内でクエリを実行する方法も良いでしょう. 最終的には、何年にもわたるデータを扱うことになりますが、そのすべてがすべての人にとって必要なわけではありません。

この例では、最初の 3 行と最後の 2 行が返されます。行 5 は BREAK ですが、人物 1 の SHIFT 内では発生しません。

いくつかのコードを提供したいと思っていますが、正直なところ、これをどこから始めるべきかさえ考えられません。サブクエリが必要だと思いますか?どんな助けでも大歓迎です!

私は主に Access 2003 を使用しているので、それに合わせた回答が理想的です。

4

1 に答える 1

1

問題を説明した方法では、シフトと関連する休憩を別の行として表示したいようです。これを行うには、 を使用union allして 2 つの異なるタイプを組み合わせることができます。相関サブクエリを使用すると、シフト中に発生する休憩を見つけることができます。

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 に答える