SQL从组中选择

Con*_*nos 1 t-sql sql-server-2008

假设我们有以下表格数据:

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
Run Code Online (Sandbox Code Playgroud)

如您所见,我们有2个组(具有相同的父组).我想选择提交的后一阶段.在上面的例子中,我想选择ID为2和8.我完全迷失了,所以如果有人可以提供帮助,我将非常感激.:)

Căt*_*tiș 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
Run Code Online (Sandbox Code Playgroud)

说明:首先,使用submitted = 1(内部选择)隔离每个组的最大阶段.然后,将结果与真实表连接,以过滤掉没有最大阶段的记录.