2009-05-19 48 views
1

假设我们有如下表数据:SQL从一组选择

ID parent stage  submitted 
1  1   1   1 
2  1   2   1 
3  1   3   0 
4  1   4   0 
5  5   1   1 
6  5   2   1 
7  5   3   1 
8  5   4   1 

正如你可以看到我们有2组(即具有相同的父)。我想选择提交的后一阶段。在上面的例子中,我想选择ID的2和8.我完全失去了,所以如果任何人可以帮助它,将不胜感激。 :)

+0

不知道我理解这一点: “我要选择的ID`s 2和8”。你可以解释吗? – 2009-05-19 13:07:51

+0

嗯,我明白了 - 你想要提交的每个父母的最高阶段价值= 1.对不起,关于这一点,我现在登上。 – 2009-05-19 13:10:08

+0

准确亚当五,从数据我想要一个选择语句,作为结果返回ids 2和8,行从他们的共同父母有更高阶段和其提交。 (不是通过选择2和8显式:P) – Constandinos 2009-05-19 13:13:26

回答

8
SELECT T.ID, T.PARENT, T.STAGE 
from 
    T, 
    (
     select PARENT, MAX(STAGE) MAX_STAGE 
     from T 
     where SUBMITTED = 1 
     GROUP BY PARENT 
    ) M 
where 
    T.STAGE = M.MAX_STAGE 
    AND T.PARENT = M.PARENT 

说明: 首先,隔离每个组的最大阶段与提交= 1(内部的选择)。 然后,将结果与真实表结合起来,过滤掉没有最大阶段的记录。

+0

优秀的卡塔林,快速的反应和非常好的解释。 – Constandinos 2009-05-19 13:18:38

-1
SELECT * FROM Table WHERE ID = 2 OR ID = 8 

这是你想要的吗?

+0

不,我很抱歉。看到我的评论,我想解释得更好一点。 – Constandinos 2009-05-19 13:14:19

1
Select Parent, max(Id) 
From tbl t 
Inner Join 
(
    Select Parent, max(Stage) as Stage 
    from tbl t 
    Where Submitted = 1 
    Group by Parent 
) submitted 
on t.Parent = submitted.parent and 
    t.stage = submitted.stage 
Group by Parent 
1

这应做到:

SELECT 
    T1.id, 
    T1.parent, 
    T1.stage, 
    T1.submitted 
FROM 
    Some_Table T1 
LEFT OUTER JOIN Some_Table T2 ON 
    T2.parent = T1.parent AND 
    T2.submitted = 1 AND 
    T2.stage > T1.stage 
WHERE 
    T1.submitted = 1 AND 
    T2.id IS NULL