0

多くの列 2 を返すテーブルがあります。そのうちの 2 つは、労働者のシフトの「イン」と「アウト」を表すタイム スタンプです。指定された 2 つのタイム スタンプの間にあるレコードの 3 番目の列の値を返したいと考えています。問題は、3 番目の列の値も必要な 2 つのタイムスタンプ レコードの間に行があることです。

例えば:

ID 日付 イン アウト 色 場所
==== ==== == === ==== ========
1 09/20 09:00 17:00 ブラックパリ
2 09/21 09:00 NULL ブラックパリ
3 09/21 NULL NULL ホワイトロンドン
4 09/21 NULL NULL レッドロンドン
5 09/21 NULL 20:00 ブルーロンドン
6 09/22 09:00 NULL ブラックパリ
7 09/22 NULL NULL ホワイトロンドン
8 09/22 NULL NULL 赤パリ
9 09/22 NULL 17:00 ブルーロンドン

この例ではColor、交差したシフト内にあるすべてのレコードの列のすべての値が必要です19:00Colorしたがって、 IDの値をcrossed2,3,4, and 5のシフトのみとして返したいと思います。09/2119:00

4

1 に答える 1

0

inとを入力する必要があるようoutですNULL。これは、相関サブクエリで行うことができます。

select t1.*
from (select t1.*,
             (select top 1 in
              from t t2
              where t2.in is not null and
                    t2.id <= t.id
              order by t2.id desc
             ) as RealIn,
             (select top 1 out
              from t t2
              where t2.out is not null and
                    t2.id >= t.id
              order by t2.id asc
             ) as RealOut
      from t t1
     ) t1
where '19:00' between RealIn and RealOut;
于 2013-11-07T02:11:19.373 に答える