1

次のようなスキーマがあります。

------------------------------------
ID | Time | Type | Description | obj
------------------------------------

そして、いくつかのデータは次のようになります

1 | 01/01/1900 01:01:01 AM | 1 | Start | O1
2 | 01/01/1900 01:01:02 AM | 1 | Start | O2
3 | 01/01/1900 01:01:03 AM | 2 | Stop  | O1
4 | 01/01/1900 01:01:04 AM | 2 | Stop  | O2

ノート:

  • O1、O2 などは、プロセスが操作したオブジェクトの ID です。開始時間と停止時間は一貫していますが、オブジェクトごとに複数の開始時間と停止時間があります (プロセスは特定のオブジェクトに対して複数回開始および終了し、私のクエリでは、そのたびにレコードを選択する必要があります。プロセスはそのオブジェクトを処理しました)
  • この質問を明確にするために、説明には開始/停止と記載されています。実際には、解析されるあらゆる種類のデータがあります。

したがって、必要なのは、互いに最も近い開始時間と停止時間のペアです。別の言い方をすれば、開始時刻ごとに、次に近い停止時刻が必要です。したがって、上記のサンプル データ (選択された ID のみ) の select ステートメントの結果は次のようになります。

(1, 3)

(2, 4)

私が試したこと:

SELECT  obj, 
        [Time] AS StartTime, 
        (SELECT MIN([TIME]) AS t
         FROM   TheTable
         WHERE  [Type] = 2
         HAVING MIN([Time]) > StartTime) AS StopTime
FROM     TheTable
WHERE    [Type] = 1;

StartTime は内部の選択には不明であるため、これは明らかに機能しません。内側の選択に having 句がなくても実行されますが、予想どおり、すべてのエントリに対して同じ StopTime が得られます。もちろん、これは私が必要としているものではありません。

これを解決する方法はありますか?

4

2 に答える 2