SQL выберите из группы - PullRequest
1 голос
/ 19 мая 2009

Предположим, у нас есть следующие данные таблицы:

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 группы (с одним и тем же родителем). Я хочу выбрать последний этап, который представлен. В приведенном выше примере я хочу выбрать идентификаторы 2 и 8. Я полностью потерян, поэтому, если кто-то может помочь, это будет оценено по достоинству. :)

Ответы [ 4 ]

8 голосов
/ 19 мая 2009
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 (внутренний выбор). Затем объедините результат с реальной таблицей, чтобы отфильтровать записи без максимальной стадии.

1 голос
/ 19 мая 2009

Это должно сделать это:

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
1 голос
/ 19 мая 2009
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
0 голосов
/ 19 мая 2009
SELECT * FROM Table WHERE ID = 2 OR ID = 8

Это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...