假设我们有如下表数据: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.我完全失去了,所以如果任何人可以帮助它,将不胜感激。 :)
假设我们有如下表数据: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.我完全失去了,所以如果任何人可以帮助它,将不胜感激。 :)
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(内部的选择)。 然后,将结果与真实表结合起来,过滤掉没有最大阶段的记录。
优秀的卡塔林,快速的反应和非常好的解释。 – Constandinos 2009-05-19 13:18:38
SELECT * FROM Table WHERE ID = 2 OR ID = 8
这是你想要的吗?
不,我很抱歉。看到我的评论,我想解释得更好一点。 – Constandinos 2009-05-19 13:14:19
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
这应做到:
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
不知道我理解这一点: “我要选择的ID`s 2和8”。你可以解释吗? – 2009-05-19 13:07:51
嗯,我明白了 - 你想要提交的每个父母的最高阶段价值= 1.对不起,关于这一点,我现在登上。 – 2009-05-19 13:10:08
准确亚当五,从数据我想要一个选择语句,作为结果返回ids 2和8,行从他们的共同父母有更高阶段和其提交。 (不是通过选择2和8显式:P) – Constandinos 2009-05-19 13:13:26