2012-03-06 120 views
0

只有當我需要在包含記錄(時間= 08.38和行= 28)和(時間= 10.20和行= 28)的行之間選擇表中的所有行(*)時這兩行具有相同的GROUP_ID(所選行必須具有這兩行的相同GROUP_ID)。SQL查詢找到具有相同組ID的兩行

具有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之間)與記錄(TIME = 08.32和線路= 28)和行C)與記錄(時間= 10.20和行= 28),它具有相同的GROUP_ID = 5.

任何人都可以幫助我嗎?

+0

在單個查詢中無所事事 – 2012-03-06 22:29:23

回答

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排序(我認爲),然後選擇具有相同組ID的行A和行C ID之間的所有行 – 2012-03-06 23:13:43

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 

我認爲這可以更有效地進行連接,但因爲我不甚至當然,這會產生正確的結果,我會堅持優化它。

相關問題