2012-03-06 16 views
0

私のテーブルのレコード(TIME = 08.38とLINE = 28)とTIME = 10.20とLINE = 28の行の間ですべての行(*これらの2つの行は同じGROUP_IDを持ちます(選択された行には、これらの2つの行の同じGROUP_IDが必要です)。同じgroupIDを持つ2つの行を検索するSQLクエリ

4行のDB_Tableの例:

 ID  TIME  LINE  GROUP_ID 
     __________________________________________ 
    A) 1  08.32  28   5 
    B) 2  09.18  28   5 
    C) 3  10.20  28   5 
    D) 4  10.25  28   6 

私の例では、クエリは、行Bを返す必要に)IDによって行を順序付けることは、行Aとの間にあるので)レコードと(時間= 08.32、ライン28を=)と行C)レコード(TIME = 10.20とLINE = 28)と同じGROUP_ID = 5です。

誰かが私を助けることができますか?

+0

すべてのことを1つのクエリで行うことはありません –

答えて

0

以下試してみてください。

select * form db_table 
where TIME between '08.38' AND '10.20' and LINE = 28 
group by GROUP_ID 
0

をあなたはまた、同様に、自己結合を試みることができる:

Select * from TestTable T1 
Inner Join TestTable T2 On T1.GroupID=T2.GroupID 
Where (T1.Time > '08:38:00.0000000' And T1.Time < '10:20:00.0000000') AND 
(T2.Time > '08:38:00.0000000' And T2.Time< '10:20:00.0000000') AND 
T1.Line=28 And T2.Line=28 
+0

あなたの有益な返信をありがとう、私の質問はまずIDで注文する必要があります。そして、同じgroupIDを持つ行Aと行Cの間のすべての行を選択します –

0

私は、私は完全にあなたがした後、私はあなたが後にいると思うものに基づいているものをフォローわかりませんこれはうまくいくはずです:

SELECT t.* 
FROM db_table t1 
     INNER JOIN 
     ( SELECT Group_ID, Line, MIN(Time) [MinTime], MAX(Time) [MaxTime] 
      FROM db_table 
      GROUP BY Group_ID, Line 
     ) t2 
      ON t2.Group_ID = t1.Group_ID 
      AND t2.Line = t1.Line 
WHERE t1.Time > t2.MinTime 
AND  t2.Time < t2.MaxTime 

私はこれが結合でより効率的に実行できると思いますが、確かに、これは私が最適化に着火する正しい結果をもたらす。

関連する問題