求SQL!该如何处理

求SQL!!------------------------------------namerolesigntimeGROUPddadmin20011dvUsers21111sdfadmin200

求SQL!!
------------------------------------
name       role           signtime         GROUP
dd           admin         2001                   1
dv           Users         2111                   1
sdf         admin         2001                   1
ds           users         1955                   1
dd           admin         2001                   2
dv           Users         2001                   2
sdf         admin         1955                   2
ds           users         1955                   2

想用查询查找得到以下结果
------------------------------------
name       role           signtime         GROUP
sdf         admin         2001                   1
dd           admin         2001                   2
就是想查找每个GROUP中,是管理员的,
最迟注册的用户.




[解决办法]
select name,role,sightime,GROUP from t a where not exists
(
select 1 from t where GROUP=a.GROUP and signtime> a.signtime
)
[解决办法]
select name,role,signtime,[GROUP] from test a where not exists
(
select 1 from test where [GROUP]=a.[GROUP] and signtime> a.signtime and role= 'admin '
)
and a.role= 'admin '
[解决办法]
name role signtime GROUP
---------- ---------- ----------- -----------
sdf admin 2001 1
dd admin 2001 2
[解决办法]
name role signtime GROUP
---------- ---------- ----------- -----------
sdf admin 2001 1
dd admin 2001 2
[解决办法]
如果数据中同1组中,signtime只有1个最大的时候

select d.* from (select max(signtime) as signtime,GROUP from table
where role= 'admin '
group by GROUP) t,table d
where t.signtime=d.signtime and t.GROUP=d.GROUP
[解决办法]
select * from tablename a
where exists (select 1 from tablename where group=a.group and role= 'admin ' and a.signtime> signtime)
[解决办法]
select *
from c a
where not exists(select 1 from c where signtime> a.signtime and role= 'admin ') and a.role= 'admin '
返回:


name role signtime group
---------- -------------------- -------- -----------
dd admin 2001 1
sdf admin 2001 1
dd admin 2001 2

(所影响的行数为 3 行)


之所以是3行,是因为楼主所给的数据中有两个2001
[解决办法]

create table #t([name] varchar(10),role varchar(10),signtime char(4), [group] char(1) )

select * from #t

insert into #t values( 'dd ' , 'admin ' , '2001 ' , '1 ')
insert into #t values( 'dv ' , 'users ' , '2011 ' , '1 ')
insert into #t values( 'sdf ' , 'admin ' , '2001 ' , '1 ')
insert into #t values( 'dd ' , 'admin ' , '2001 ' , '2 ')
insert into #t values( 'dv ' , 'users ' , '2001 ' , '2 ')
insert into #t values( 'sdf ' , 'admin ' , '1955 ' , '2 ')
insert into #t values( 'ds ' , 'users ' , '1955 ' , '2 ')

select * from #t a
where not exists (select 1 from #t where [group]=a.[group] and a.role=role and signtime> a.signtime)
and a.role= 'admin '


name role signtime group
---------- ---------- -------- -----
dd admin 2001 1
sdf admin 2001 1
dd admin 2001 2

(所影响的行数为 3 行)