2012-03-06 115 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 

我认为这可以更有效地进行连接,但因为我不甚至当然,这会产生正确的结果,我会坚持优化它。

相关问题