SQL查询查找具有相同groupID的两行

时间:2012-03-06 22:24:31

标签: mysql sql select join

我需要在记录(TIME = 08.38 AND LINE = 28)AND(TIME = 10.20 AND LINE = 28)的行之间选择表格中的所有行(*),前提是这两行具有相同的GROUP_ID(选定的行)必须具有这两行的相同GROUP_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 AND LINE = 28)和行C)之间的记录(TIME = 10.20 AND LINE = 28)并且它具有相同的GROUP_ID = 5。

任何人都可以帮助我?

3 个答案:

答案 0 :(得分:0)

尝试以下:

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

答案 1 :(得分: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

答案 2 :(得分: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

我认为通过连接可以更有效地执行此操作,但由于我甚至不确定这会产生正确的结果,因此我会着手优化它。